C++用模板类实现数组功能

C++用模板类实现数组功能,第1张

        在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类型都实现了插入删除等 *** 作。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/2889509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-14
下一篇 2022-09-14

发表评论

登录后才能评论

评论列表(0条)

保存