[英]Iterate through vector of objects c++
我一直在努力解决这个问题,所以希望有人能帮助我。
我正在创建对象的向量,并且我想访问该向量的元素,但是当我将en元素推回到向量中并尝试访问它时,它不起作用。 谢谢您的回答。
class reserve{
private:
vector<float> coordinates;
public:
reserve(const reserve &);
void addACoordinate(float);
void readCoordinates();
int getDim();
};
reserve::reserve(const reserve &w){
int i;
for(i=0; i<coordinates.size(); i++){
coordinates[i] = w.coordinates[i];
}
}
void reserve::addACoordinate(float c){
coordinates.push_back(c);
}
void reserve::readCoordinates(){
int i;
cout << "the coordinates are : ";
for(i=0; i<coordinates.size(); i++){
cout << coordinates[i] << " ";
}
cout << endl;
}
int reserve::getDim(){
return coordinates.size();
}
然后,我创建一个具有2个坐标的储备并将其推入储备向量中。
vector<reserve> reserves;
reserve r;
r.addACoordinate(1.9);
r.addACoordinate(1.9);
r.getDim();
reserves.push_back(r);
cout << "size of reserves " << reserves.size() << endl;
for (vector<reserve>::iterator k = reserves.begin(); k != reserves.end(); ++k) {
k->getDim();
}
但是迭代的输出是0,而不是2。我不明白为什么我不访问保留r。
所示的复制构造函数已完全损坏:
reserve::reserve(const reserve &w){
int i;
for(i=0; i<coordinates.size(); i++){
复制构造函数运行时,新构造的coordinates
类成员始终完全为空。 很显然,它从一开始就不会神奇地拥有任何内容,因此,这里的coordinates.size()
始终为零。 复制构造函数永远不会实际复制要从中进行复制的元素,所谓的“复制”将始终具有一个空向量。 并将其更改为w.coordinates.size()
将导致内存损坏,除非您还将循环中的分配替换为push_back()
。 说到push_back
()...
reserves.push_back(r);
push_back()
尝试将r
复制到向量中。 这就是工作。 猜猜该怎么做? 当然,为什么是破碎副本构造函数。 即使r
具有已初始化的coordinates
向量,破碎的副本构造函数也将确保reserves
最终以带有完全空的coordinates
向量的类实例结束。
您可以在这里完全摆脱复制构造函数。 它没有任何用处,默认的副本构造函数将正确执行所有操作。
如果您需要为作业分配手动实现复制构造函数,请对其进行修复,以使其能够正确push_back()
s从要从中复制的类实例中获取值,或者手动复制类成员本身,无论您需要执行什么工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.