模板成員函數,嗯,是一個和我有距離的概念。。。
我寫出來的答案和錯誤的答案幾乎一樣。。。汗一個。。。
貼上正確的代碼吧,認真學習一下:
// A strongly exception-safe version: //template<typename T, size_t size>class fixed_vector{public: typedef T* iterator; typedef const T* const_iterator; fixed_vector() : v_( new T[size] ) { } ~fixed_vector() { delete[] v_; } template<typename O, size_t osize>//再次定義一個不同的模板類型能夠讓其更通用 fixed_vector( const fixed_vector<O,osize>& other ) : v_( new T[size] ) { try {copy(other.begin(),other.begin()+min(size,osize),//使用try catch結構保證穩定性 begin());} catch(...) { delete[] v_; throw; }} fixed_vector( const fixed_vector<T,size>& other ) : v_( new T[size] ) { try {copy(other.begin(), other.end(), begin());} catch(...) { delete[] v_; throw; }} void Swap( fixed_vector<T,size>& other ) throw() { swap( v_, other.v_ ); } template<typename O, size_t osize> fixed_vector<T,size>& operator=( const fixed_vector<O,osize>& other )//同上,採用新的模板類型來增加通用性 { fixed_vector<T,size> temp( other ); // does all the work Swap( temp ); return *this; // this can't throw } fixed_vector<T,size>& operator=( const fixed_vector<T,size>& other ) {//為啥要兩個拷貝賦值函數呢。。。模板不能特化? fixed_vector<T,size> temp( other ); // does all the work Swap( temp ); return *this; // this can't throw } iterator begin() { return v_; } iterator end() { return v_+size; } const_iterator begin() const { return v_; } const_iterator end() const { return v_+size; }private: T* v_;};