繁体   English   中英

遍历对象的向量c ++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM