20120918-向量实现《数据结构与算法分析》


#include <iostream> #include <list> #include <string> #include <vector> #include <bitset> using namespace std; template <typename Container,typename Object> void change(Container & c,const Object & newValue)//改变新值 { typename Container::ierator itr = c.begin(); while( itr != c.end()) { *itr++ = newValue; } } template <typename Container,typename Object> void print(const list<int> & lst,ostream & out = cout)//打印值,并且归0 { typename Container::iterator itr = lst.begin(); while( itr != lst.end()) { cout<<*itr<<endl; *itr=0; itr++; } } template <typename Container> void printCollection( const Container & c)//打印任何容器 { if (c.empty()) cout<<"(empty)"; else { typename Container::const_iterator itr = c.begin(); cout << "[" << *itr++; while(itr != c.end()) { cout << ","<<*itr++; } cout<<"]"<<endl; } } template <typename Object>//Vector类向量实现 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() { delet [] 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 theCaacity; Object *objects; } int main() { list<string> a; list<int> b; list<int> c; c.push_back(123); a.push_back("123"); a.push_back("ooo"); a.push_back("456"); a.push_back("ooo"); a.push_back("789"); printCollection(a); printCollection(b); printCollection(c); return 0; }

  前两部分是list的应用

  后一部分是vector的实现方法:可惜我不会直接测试...不知道怎么直接用.....

  今天不知道怎么的,莫名的很生气.....fuck

posted @ 2012-09-18 18:57  xingoo  阅读(686)  评论(0编辑  收藏  举报