从存储对象的向量访问变量

时间:2019-12-16 23:48:19

标签: c++

存储对象后,如何从八边形矢量访问x或y变量。

我知道如何从lots_of_coordinates向量访问x和y,因为它只是lots_of_coordinates[0].x,但我想从八边形向量中访问x和y。

public:
    int x, y;
};

class OctagonBase {
public:
    vector<Coordinate>coordinates;
    Coordinate point1;
};

class Octagon : public OctagonBase {

public:
    void Coordinates() {
        point1.x = 30;
        point1.y = 40;
        coordinates.push_back(point1);
        cout << coordinates[0].x;
    }


};

int main() {

    vector<Octagon*>octagons;

    Octagon o;
    o.Coordinates();
    octagons.push_back(o);

    //how do I access x from octagons?  
} 

编辑:

我已经使用octagons[0].point1.x;并将其从vector<Octagon*>octagons更改为vector<Octagon>octagons。但是,有一种方法可以使用vector<Octagon*>octagons

如果我将int x和y更改为private,那么如果添加适当的setter和getter函数,它仍然可以工作吗?

1 个答案:

答案 0 :(得分:1)

int main() {

    vector<Octagon> octagons;

    Octagon o;
    o.setCoordinates();
    octagons.push_back(o);

    //how do I access x from octagons?  

    // either via an integer index
    for(size_t i = 0; n < octagons.size(); ++i)
    {
      for(size_t j = 0; j < octagons[i].coordinates.size(); ++j)
      {
        std::cout << octagons[i].coordinates[j].x << '\n';
      }
    }

    // or a range based for loop
    for(auto& octagon : octagons)
    {
      for(auto& coord : octagon.coordinates)
      {
        std::cout << coord.x << '\n';
      }
    }

    return 0;
} 

尽管如此,通常来说,您通常希望在可能的情况下隐藏对内部数据的直接访问(以便公共界面描述操作)。通常,它使类更易于使用。

这不是我建议的方法,但是如果您想自己手动管理内存,则可以执行以下操作:

vector<Octagon*> octagons; 
Octagon* ptr = new Octagon;
octagons.push_back(ptr); 
octagons[0]->Coordinates();

只要确保记得再次释放它们即可。

for(auto ptr : octagons)
  delete ptr;

Imho,尽管使用std::vector<Octagon>会更好,因为内存是连续的,因此处理起来会更快。