2017-06-01 45 views
0

在類構造函數中,我正在初始化其他對象並將這些對象推送到我的類向量成員中。據我所知,vector創建了一個對象的副本並將其存儲起來,以便它不會超出範圍。但是,在驗證另一個類函數中的對象時,它們不會再被初始化。下面是一個示例代碼來解釋行爲:無法將類構造函數中新創建的對象複製到其在C++中的向量成員中

#include <iostream> 
#include <string> 
#include <vector> 
#include <algorithm> 

class Square { 
    private: 
    int size_ = 0; 
    int colour_ = 0; 

    public: 
    Square(){ 
     size_ = 0; 
     colour_ = 0; 
    } 
    void init(int size, int colour) { 
     size_ = size; 
     colour_ = colour; 
    } 
    int get_size() { return size_; } 
}; 


class SetSquares { 
    private: 
    std::vector<Square> squares_; 
    int number_; 

    public: 
    SetSquares(): number_(0) {} 
    void init(int num) { 
     number_ = num; 
     squares_.clear(); 
     squares_.resize(num); 
     for (int i=0; i < num; i++) { 
      Square square; 
      square.init(i, i); 
      squares_.push_back(square); 
     } 
    } 

    void sample(int i) { 
     if (i >= number_) { return; } 
     std::cout << "Square size is: " << squares_[i].get_size() <<  std::endl; 
    } 
}; 

int main() 
{ 
    SetSquares set_of_squares; 
    set_of_squares.init(7); 
    set_of_squares.sample(4); 
    return 0; 
} 
+2

而不是'squares_.push_back(square)'做'squares_ [i] = square;' – 0x499602D2

+0

resize行是問題,正如Tomek所述。刪除該行,並保持push_back的工作。謝謝! –

回答

1

調整大小(N)將創建一個載體的push_backñ默認構造的元素將追加的n個元素後,新的元素。按照評論中的建議使用reserve和push_back或調整大小和索引操作符。

相關問題