在C++中提供了模板功能,利用模板类可实现不同数据类型的数组功能。具体如下:
#ifndef _ARR_H_
#define _ARR_H_
#include
#include
#define SIZE 1024
using namespace std;
template
class arry
{
private:
T arr[SIZE];
int size;
int len;
public:
arry();
arry(const T *addr,int len);
T &operator[](int n);
void insert(T val,int pos); //插入 *** 作
void show();
void del(int pos);
};
#endif
首先在头文件中对数组类进行声明定义,我们定义的数组属性包括数组内容、数组最大大小以及实际数据长度。以上成员变量设置为私有变量防止被后续使用的时候被改变,接着设置公共成员函数包括构造函数(无参、带参)、运算符“[]”重载、插入、显示(这里应该也可以输出运算符重载的,暂不实现)以及删除。
#include "arr.h"
template
arry::arry()
{
memset(arr,0,sizeof(arr));
size = SIZE;
len = 0;
}
template
arry::arry(const T *addr,int len)
{
for(int i=0;ilen = len;
}
template
T &arry::operator[](int n)
{
if(n>len||n<0)
{
cout << "内存超出!" << endl;
return this->arr[0];
}
return this->arr[n];
}
template
void arry::show()
{
int length =this->len;
for(int i=0;iarr[i] << " ";
}
cout << endl;
}
template
void arry::insert(T val,int pos)
{
if(pos<0||pos>this->len)
{
cout << "插入位置错误!0~" << this->len << endl;
return;
}
int lenght = this->len;
for(int i=lenght;i>pos;i--)
{
this->arr[i] = this->arr[i-1];
}
this->arr[pos] = val;
this->len++;
}
template
void arry::del(int pos)
{
if(pos<0||pos>this->len)
{
cout << "插入位置错误!0~" << this->len << endl;
return;
}
int length = this->len;
for(int i=pos;iarr[i] = this->arr[i+1];
}
this->len--;
}
接着便是实现上述成员函数,代码如上。需要注意的是每个函数都需要添加模板类以及作用域声明。在无参构造函数中,需要使用memset函数将arr[SIZE]全都初始化为0,数组长度初始化为0。在插入函数中,每插入一个数据长度就加1,相反的,删除 *** 作就需要减1。
最后来测试一下:
#include "arr.cpp"
int main(void)
{
int a[]={1,2,3,45,6};
arry buf(a,5);
buf.show();
buf[0] = 100;
buf.show();
buf.insert(2000,3);
buf.show();
buf.del(3);
buf.show();
arry buf2("hello wrold!",13);
buf2.show();
buf2[0] = 'X';
buf2.show();
buf2.insert('O',5);
buf2.show();
buf2.del(5);
buf2.show();
return 0;
}
打印信息如下:
1 2 3 45 6
100 2 3 45 6
100 2 3 2000 45 6
100 2 3 45 6
h e l l o w r o l d !
X e l l o w r o l d !
X e l l o O w r o l d !
X e l l o w r o l d !
可以看见我们测试的int和char类型都实现了插入删除等 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)