STL中的模板

概念

模板是提供一种通用的方法来开发可重用的代码,即可以创建参数化的c++模型,可分为函数模板和类模板
函数模板提供编译过程中的文本替换功能,使用类模板可以编写通用的、安全的类。

编制动态数组模板类
#include"stdafx.h"
#include<iostream>
using namespace std;

template<class T>
class MyArray {
private:
    int m_TotalSize;
    int m_ValidSize;
    T* m_pData;
public:
    void Create(int nSize)//创建数组
    {
        m_pData = new T[nSize];
        m_TotalSize = nSize;
        m_ValidSize = 0;

    }
    void Add(T value)//添加数据
    {
        if (m_ValidSize<m_TotalSize)
        {
            m_pData[m_ValidSize] = value;
            m_ValidSize++;
        }
        else {
            int i = 0;
            //T* tmpData = m_pData;明显的错误  如果这样做的话 delete了m_pData  tmpData的内容也会被清除
            T* tmpData = new T[m_ValidSize];
            for (i = 0; i<m_ValidSize; i++)
            {
                tmpData[i] = m_pData[i];
            }
            delete[]m_pData;
            m_TotalSize *= 2;
            m_pData = new T[m_TotalSize];
            for (i = 0; i<m_ValidSize; i++)
            {
                m_pData[i] = tmpData[i];
            }
            delete []tmpData;
            m_pData[m_ValidSize] = value;
            m_ValidSize++;
        }
    }
    int GetSize()//获得数组有效长度
    {
        return m_ValidSize;
    }
    T GetValue(int n)//返回某一位置元素
    {
        return m_pData[n];
    }
    virtual ~MyArray()
    {
        delete[]m_pData;
        m_pData = NULL;
    }
};
int main()
{
    MyArray<int> obj;//表明数组中存放的类型是int型 若为char 则表明数组中存放的类型为char型
    obj.Create(3);
    obj.Add(1);
    obj.Add(2);
    obj.Add(3);
    obj.Add(4);
    for (int i = 0; i<obj.GetSize(); i++)
    {
        cout << obj.GetValue(i) << endl;
    }
    system("pause");
    return 0;
}
编制数组求和的模板函数
#include<iostream>
using namespace std;

template<class T>
T sum(T data[],int nSize)
{
    T sum = 0;
    for(int i=0;i<nSize;i++)
    {
        sum+=data[i];
    }
    return sum;
}

void main()
{
    int a[5]={1,2,3,4,5};
    cout<<sum(a,5)<<endl;

}

参见刘德山老师的 c++STL基础及应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值