通过对象c ++向量迭代

时间:2017-09-10 22:29:50

标签: c++ vector

我一直在努力解决这个问题,所以我希望有人可以帮助我。

我正在创建一个对象向量,我想访问此向量的元素但是当我将en元素推回向量并尝试访问它时,它不起作用。 谢谢你的回答。

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();

 }

然后我创建一个带有2个坐标的储备并将其推入储备矢量。

$2 != /c21|c22/

但是迭代的输出是0,而不是2.我不明白为什么我没有访问保留r。

1 个答案:

答案 0 :(得分:2)

显示的复制构造函数完全破坏了:

reserve::reserve(const reserve &w){
    int i;
    for(i=0; i<coordinates.size(); i++){

复制构造函数运行时,新构造的coordinates类成员始终为空。它显然从一开始就没有任何内容,所以coordinates.size()在这里总是为零。复制构造函数永远不会实际复制用于复制的元素,以及所谓的&#34;副本&#34;它总是有一个空的向量。将此更改为w.coordinates.size()将导致内存损坏,除非您还使用push_back()替换循环中的赋值。说到push_back()......

reserves.push_back(r);

push_back()尝试将r复制到此处的向量中。这是它的工作。猜猜将要用这些来做什么?为什么,破碎的拷贝构造函数,当然。即使r具有初始化的coordinates向量,受损复制构造函数也会确保reserves最终会得到一个带有完全空coordinates向量的类实例。

你可以在这里彻底摆脱复制构造函数。它没有任何用处,默认的复制构造函数将正确地完成所有操作。

如果你需要为你的家庭作业手动实现一个复制构造函数,请正确地修复它push_back()来自复制的类实例的值,或者手动复制类成员本身,无论你需要什么做好这份工作。