以下是实现以及应用的一个例程:
#include <iostream>
using namespace std;
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 < 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;
};
int main()
{
Vector<int> Num;
cout << "输入一组数据:" << endl;
int temp;
while ( cin >> temp )
Num.push_back( temp );
cout << "你输入的数据是:" << endl;
Vector<int>::iterator iter = Num.begin();
for ( ; iter != Num.end() ; ++iter )
cout << *iter << " ";
cout << endl;
return 0;
}
我们一路奋战,不是为了改变世界,而是不让世界改变我们
——《熔炉》