您的位置:首页 > 其它

自定义简化版本的vector容器

2016-01-01 18:03 337 查看
[code] 实现一个简单的vector容器,容器中的元素只能容纳整数,默认初始化时,容器的大小为1,且把容器中每个元素的值初始化为0,当向容器中添加元素时,如果此时容器已满,则申请一个新的容器,其大小为原来容器的两倍,并把原先容器中的元素赋值到新容器中,然后再添加新的元素,最后把原来容器的空间给释放。两个容器之间可以相互拷贝,且可以用一个容器构造另一个新的容器。可以用[]操作符访问容器中的元素。其代码如下:
#include<iostream>
using namespace std;

class MyVector
{
public:
	//无参数构造函数
	MyVector()
		:arr(new int[1]()),capacity(1),size(0)
	{}
	//初始化容器大小,容器中的元素初始化为0
	MyVector(int len)
		:arr(new int[len]()),capacity(len),size(0)
	{}

	//赋值构造函数
	MyVector(const MyVector &rhs)
	{
		this->arr = new int[rhs.capacity]();
		for(int i = 0; i < rhs.size; ++i)
		{
			this->arr[i] = rhs.arr[i];
		}
		this->size = rhs.size;
		this->capacity = rhs.capacity;
	}
	
	//赋值操作符
	MyVector& operator=(const MyVector& rhs)
	{
		if(this != &rhs)
		{
			MyVector tmp(rhs);
			int *tmp_arr = rhs.arr;
			tmp.arr = this->arr;
			this->arr = tmp_arr;
			this->capacity = rhs.capacity;
			this->size = rhs.size;
		}
		return *this;
	}

	//向容器中添加元素
	void push_back(int val)
	{
		if(size < capacity)
		{
			arr[size++] = val;
		}
		else
		{
			capacity *= 2;
			int *arr_new = new int[capacity];
			for(unsigned int i = 0; i < size; ++i)
			{
				arr_new[i] = arr[i];
			}
			arr_new[size++] = val;
			delete arr;
			arr = arr_new;
		}
	}
	
	//重载操作符[]
	int& operator[](unsigned int len)
	{
		if(len >= size)
		{
			len = 0;
		}
		return arr[len];
	}

	//重载操作符[]
	const int& operator[](unsigned int len)const
	{
		if(len >= size)
		{
			len = 0;
		}
		return arr[len];
	}

private:
	int *arr;//指向容器中元素的指针
	unsigned int capacity;//容器的容量
	unsigned int size;//容器中元素的个数
};

int main(void)
{
	MyVector ve;
	ve.push_back(1);
	ve.push_back(2);
	ve.push_back(3);
	ve.push_back(4);
	ve.push_back(5);
	MyVector v2;
	v2.push_back(3);
	cout<<v2[2]<<endl;
	MyVector ve1(ve);
	ve = v2;
	system("pause");
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: