/* ===================================================================== */
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;
};
/* ===================================================================== */
数据结构与算法分析之图3-7和图3-8——Vector类
最新推荐文章于 2020-11-06 15:42:44 发布