vector简单实现
生活随笔
收集整理的這篇文章主要介紹了
vector简单实现
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#include<iostream>
"https://github.com/fookwood/fkcode/network"
template<class Object>
class Vector{
private:int theSize; //元素的個(gè)數(shù)int theCapacity; //容量Object *objects; //指向new分配的資源
public:explicit Vector( int initSize = 0 ):theSize( initSize ),theCapacity( initSize + SPACE_CAPACITY ){objects = new Object[ theCapacity ];}//用explicit避免隱式類(lèi)型轉(zhuǎn)換Vector( const Vector & rhs ):objects( NULL ){operator=( rhs );}//copy constructor~Vector(){delete [] objects;}const Vector & operator= ( const Vector & rhs ){if( this != &rhs ){//如果是本身的話就不用再操作了delete [] objects;theSize = rhs.size();theCapacity = rhs.capacity();objects = new Object[ capacity() ];for( int k = 0; k < theSize; k++ )//拷貝元素 objects[k] = rhs.objects[k]; } return *this; }// above,the "big three" void resize( int newSize ){ if( newSize > theCapacity )reserve( newSize*2 + 1 ); //theSize = newSize;}//每次空間不夠的時(shí)候,就重新獲得2倍于當(dāng)前容量的空間,+1是為了防止0的情況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;}//獲取新的空間,拷貝,釋放舊的
//[]操作符,non-const和const版的..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[ theSize ]; }const_iterator end() const { return &objects[ theSize ]; }enum{ SPACE_CAPACITY = 4 };//初始容量
};int main() {
//進(jìn)行簡(jiǎn)單的測(cè)試Vector V;for( int i = 0; i < 100; i++ )V.push_back( i );for( Vector::iterator it = V.begin(); it != V.end(); it++ )std::cout << *it << std::endl;const Vector v( V );for( Vector::const_iterator it = V.begin();it != V.end(); it++ )std::cout << *it << std::endl;return 0;
}
http://www.fookwood.com/archives/455
總結(jié)
以上是生活随笔為你收集整理的vector简单实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 两个数之间的最短路径问题
- 下一篇: 捞鱼问题