目录
一、实现思路
1、封装一个数组类模板;
2、使用动态数组的思想,使用new开辟空间;
3、申请空间
4、判断数组指针;
5、把原pbuf拷贝到申请到的pnew;
6、释放pbuf;
7、数据入数组;
二、代码实现
#include <iostream>
using namespace std;
#include <string.h>
template <typename T>
class Mybuf //数组类的封装
{
public:
Mybuf();
void show();
void push(const T & data);
private:
T *pbuf;
int size;
};
template <typename T> //初始化构造
Mybuf<T>::Mybuf()
{
pbuf = NULL;
size = 0;
}
template <typename T>
void Mybuf<T>::push(const T& data)
{
T *pnew;
pnew = new T[size+1];//申请空间
if(pbuf)//判断
{
#if 0
for(int i =0;i<size;i++) //使用for循环把pbuf拷贝到pnew;
{
pnew[i] = pbuf[i];
}
#endif
memcpy(pnew,pbuf,sizeof(T)*size); //使用mercpy拷贝
delete[] pbuf;//释放pbuf
}
pbuf = pnew;
pbuf[size++] = data;//数据入数组
}
template <typename T>
void Mybuf<T>::show() //打印函数
{
int i;
for(i=0;i<size;i++)
{
cout << pbuf[i] << " ";
}
cout << endl;
}
void test() //测试函数
{
int i;
Mybuf<int> a;
Mybuf<float> b;
Mybuf<char> c;
Mybuf<double> d;
Mybuf<string> e;
c.push('L') ;
c.push('O');
c.push('V');
c.push('E');
e.push("I love you");
for(i=0; i< 10; i++)
{
a.push(i);
b.push(i+3.14);
d.push(i+3.14159);
}
a.show();
b.show();
c.show();
d.show();
e.show();
}
int main(int argc, char *argv[])
{
test();
return 0;
}
三、运行结果