2013-01-01 193 views
3

我對創建我的模板類時發生了什麼感到有些莫名其妙。我試圖在構建過程中將成員vector_的容量設置爲50(僅一次),但容量似乎從未正確設置,所以顯然我不明白這應該如何完成。我已經包含了相關的代碼片段以及控制檯輸出。感謝您的幫助!對於矢量C++初始化模板類

模板類:

的R
template <typename T> 
class V 
{ 
    public: 
    V() 
    { 
     std::cout << "capacity 1 = " << this->vector_.capacity() << "\n"; 
    }; 
    V(int capacity) 
    { 
     this->vector_.reserve(capacity); 
     std::cout << "capacity 2 = " << this->vector_.capacity() << "\n"; 
    }; 
    int capacity() const { return this->vector_.capacity(); }; 
    private: 
    std::vector<T> vector_; 
}; 

構造,其中它被初始化:

R::R() 
{ 
    std::cout << "capacity 0 = " << this->s_.capacity() << "\n"; 
    this->s_ = V< std::vector< std::complex<float> > >(50); 
    std::cout << "capacity 3 = " << this->s_.capacity() << "\n"; 
}; 

R類別的部首:

class R 
{ 
    public: 
    R(); 
    private: 
    V< std::vector< std::complex<float> > > s_; 
}; 

輸出到控制檯:

capacity 1 = 0 
capacity 0 = 0 
capacity 2 = 50 
capacity 3 = 0 
+0

缺少_copy-constructor_也許?生成該輸出的代碼是什麼? –

+0

這是如何編譯的? 's_'的類型是'V',它沒有方法'capacity' ... –

+0

另外,讓V()返回一些東西,比如說類vector的引用,這是problaby爲什麼你R中的最後一行構造函數令你感到困惑。 – johnathon

回答

4

您不設置std::vector<T>的大小,但它的容量。容量不是std::vector<T>的顯着屬性,因此不會被複制。您需要使用resize()來設置大小。

+0

我怎麼會正確地設置容量,因爲它似乎我必須使用複製構造函數?或者是有另一種方式來使用單個構造函數,因爲我只想實例化一次,但在R的構造函數中... – wrapperapps

+1

@wrapperapps:您將需要提供一個副本構造函數(和一個副本分配,如果您分配的對象)哪複製'capacity()'。請注意,即使設置非零容量,向量的大小將保持不變,即它是空的,但分配內存 –

+0

謝謝,我通過添加: V&operator =(V const&copy) {this_> vector_ = copy.vector_; this-> vector_.reserve(copy.vector_.capacity()); return * this; }; – wrapperapps