无法将类构造函数中新创建的对象复制到其在C++中的向量成员中

问题描述:

在类构造函数中,我正在初始化其他对象并将这些对象推送到我的类向量成员中。据我所知,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的工作。谢谢! –

调整大小(N)将创建一个载体的push_backñ默认构造的元素将追加的n个元素后,新的元素。按照评论中的建议使用reserve和push_back或调整大小和索引操作符。