利用模板实现vector类,异常处理

题目描述

参考C++ vector类模板,设计实现自己的CVector向量类模板,完成下列基本功能: 构造、析构、size、push_back和下标访问,在通过下标访问越界时抛出异常。编写测试程序,利用该类模板完成一个解释器,它接受命令,执行相应操作。本题不可使用STL vector,所需内存通过动态分配获得,所需内存扩展不可频繁发生。

输入描述

输入命令有5种 :int 整数 代表开始建立整数向量 (整数为向量初始大小);string 整数 代表开始建立string向量;push对象 代表在向量尾追加对象; put 下标 对象 代表需将对象放入向量下标处;fetch 下标 代表取并打印向量下标处对象;当下标越界时抛出异常并显示invalid index:下标;quit代表本队列处理结束。每个队列以int或string开始,以quit结束;所有命令均小写。

输出描述

每个向量从建立到结束输出占一行; 各输出对象前含一个空格。

样例输入

int 10 push 100 push 200 push 50 push 300 put 0 5 put 1 20 push 400 fetch 1 fetch 12 fetch -1 fetch 20 fetch 11 quit
string 10 push hello push some push apple push box put 1 zhang put 2 yes fetch 2 push hdu fetch 1 fetch 20 fetch 12 quit
样例输出

20 50 invalid index:-1 invalid index:20 200
yes zhang invalid index:20 apple

解决:注意第二个输入的整数并不是初始向量的长度,而是已经被占用的向量的长度,例如一开始输入10,push的数据的下标就是11,已经被占用的向量元素的值可以自己确定,string用“”占用,int用0占用
**注意:catch如果参数是字符串,注意const str和str的区别,如果抛出const str异常catch str是无法捕捉的
代码实现

#include
#include
using namespace std;
template
class vector
{
	private:
		Elemtype *value;
		int L;
		int count;
	public:
		vector();
		void push_back(Elemtype x);
		Elemtype begin();
		Elemtype end();
		void pop();
		int size();
		Elemtype &operator[](int x);
		~vector();
};
template
vector::vector()
{
	L=20;
	value=new Elemtype[L];
	count=0;
}
template
void vector::push_back(Elemtype x)
{
	if(count>=L)
	{
		Elemtype *t=new Elemtype[L+10];        //改了无数遍的内存扩展,哭辽
		for(int i=0;i
void vector::pop()
{
	count--;
}
template
Elemtype vector::begin()
{
	return value[0];
}
template
Elemtype vector::end()
{
	return value[count-1];
}
template
int vector::size()
{
	return count;
}
template
Elemtype &vector::operator[](int x)
{
	if(x<0||x>=count)
		throw x;
	return value[x];
}
template
vector::~vector()
{
	delete[] value;
	L=0;
	count=0;
}
int main()
{
	string s;
	while(cin>>s)
	{
		if(s=="int")
		{
			vector jojo;
			int number;
			cin>>number;
			for(int i=0;i>s1&&s1!="quit")
			{
				if(s1=="push")
				{
					int data;
					cin>>data;
					jojo.push_back(data);
					
				}
				else if(s1=="put")
				{
					int data1, data2;
					cin>>data1>>data2;
					jojo[data1]=data2;
				}
				else if(s1=="fetch")
				{
					try
					{
						int data;
						cin>>data;
						 cout< jojo;
			int number;
			cin>>number;
			for(int i=0;i>s1&&s1!="quit")
			{
				if(s1=="push")
				{
					string data;
					cin>>data;
					jojo.push_back(data);
					
				}
				else if(s1=="put")
				{
					int data1;
					string data2;
					cin>>data1>>data2;
					jojo[data1]=data2;
				}
				else if(s1=="fetch")
				{
					try
					{
						int data;
						cin>>data;
						 cout<

你可能感兴趣的:(利用模板实现vector类,异常处理)