vector的一种简单实现

template <typename Object>
class Vector
{
public:
	explicit Vector(int initSize = 0)
		: theSize(initSize), theCapacity(initSize + SPARE_CAPACITY)
		{ objects = new Object[theCapacity]; }
	Vector(const Vector &rhs) : objects(NULL)
	{ operator=(rhs); }	
	~Vector()
	{ delete []objects; }
	
	const Vector &operator=(const Vector &rhs)
	{
		if(this != &rhs)
		{
			delete []objects;
			theSize = rhs.size();
			theCapacity = rhs.theCapacity;

			objects = new Object[capacity()];
			for(int k = 0; k < size(); ++k)
				objects[k] = rhs.objects[k];
		}
		return *this;
	}
	
	void resize(int newSize)
	{
		if(newSize > theCapacity)
			reserve(newSize * 2 + 1);
		theSize = newSize;
	}
	
	void reserve(int newCapacity)
	{
		if(newCapacity < theSize)
			return;
		
		Object *oldArray = objects;
		
		objects = new Object[newCapacity];
		for(int k = 0; k < size(); ++k)
			objects[k] = oldArray[k];
		
		theCapacity = newCapacity;
		
		delete []oldArray;
	}
	
	Object &operator[])(int index)
	{ return objects[index]; }
	const Object &operator[](int index) const
	{ return objects[index]; }
	
	
	bool empty() const
	{ return size() == 0; }
	int size() const
	{ return theSize; }
	int capacity() const
	{ return theCpacity; }
	
	void push_back(const Object &x)
	{
		if(theSize == theCapacity)
			reserve(2 * theCapacity + 1);
		objects[theSize++] = x;
	}
	
	void pop_back()
	{ theSize--; }
	
	const Object &back() const
	{ return Objects[theSize - 1]; }
	
	typedef Object *iterator;
	typedef const Object *const_iterator;
	
	iterator begin()
	{ return &objects[0]; }
	const_iterator begin() const
	{ return &objects[0]; }
	iterator end()
	{ return &objects[size()]; }
	const_iterator end() const
	{ return &objects[size()]; }
	
	enum { SPARE_CAPACITY = 16 };
	
private:
	int theSize;
	int theCapacity;
	Object *objects;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值