无法将类构造函数中新创建的对象复制到其在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;
}
答
调整大小(N)将创建一个载体的push_backñ默认构造的元素将追加的n个元素后,新的元素。按照评论中的建议使用reserve和push_back或调整大小和索引操作符。
而不是'squares_.push_back(square)'做'squares_ [i] = square;' – 0x499602D2
resize行是问题,正如Tomek所述。删除该行,并保持push_back的工作。谢谢! –