数据结构与算法分析之图3-7和图3-8——Vector类

/* ===================================================================== */
template <typename Object>
class Vector
{
public:
	explicit Vector( int initSize = 0 )             /* 构造函数初始化式 */
		: theSize( initSize ), theCapacity( initSize + SPARE_CAPACITY )
	{
		objects = new Object[theCapacity];
	}


	~Vector()                                       /* 析构函数 */
	{
		delete[] objects;
	}


	Vector( const Vector & rhs ) : objects( NULL )  /* 复制构造函数 */
	{
		operator=( rhs );
	}


	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 < theSize; 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(theCapacity);
	}


	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;
};
/* ===================================================================== */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值