访问C+的各个元素+;结构 这是我的问题,如果我解释得不好或者代码质量不好,请不要打我。我到目前为止只做了大约2周的C++。

访问C+的各个元素+;结构 这是我的问题,如果我解释得不好或者代码质量不好,请不要打我。我到目前为止只做了大约2周的C++。,c++,struct,C++,Struct,解释:我想构建一个结构(结构可能不是最好的决定,但我必须从某个地方开始),它将包含一组点的坐标(仅x和y)(让我们将集合称为弧)、集合id(以及可能的其他字段)。每个集合(弧)可以包含不同数量的点。 我已经实现了集合中的每个点(弧)作为类,然后我的弧结构在向量中包含了这个类的各种实例(以及其他东西) 弧形结构示例: Struc1: Id(int)1 xY(向量)(0;0)(1;1)(2;2) Struc2: 身份证(内部)2 xY(向量)(1;1)(4;4) 问题: 我不知道如何访问我的arc结

解释:我想构建一个结构(结构可能不是最好的决定,但我必须从某个地方开始),它将包含一组点的坐标(仅x和y)(让我们将集合称为弧)、集合id(以及可能的其他字段)。每个集合(弧)可以包含不同数量的点。 我已经实现了集合中的每个点(弧)作为类,然后我的弧结构在向量中包含了这个类的各种实例(以及其他东西)

弧形结构示例:

Struc1:

Id(int)1

xY(向量)(0;0)(1;1)(2;2)

Struc2:

身份证(内部)2

xY(向量)(1;1)(4;4)

问题: 我不知道如何访问我的arc结构中的元素:例如,如果我需要访问Id为1的struc中第二个点的坐标,我希望
Struc1.xY[1]
,但是这不适用于我的代码(如下所示)。 我发现这解释了如何在结构内部打印值,但我需要访问这些元素(稍后)有条件地编辑这些坐标。这怎么可能被弹劾

我的尝试:(已编辑)

#include <cmath>
#include <vector>
#include <cstdlib> 
#include <stdio.h>
#include <iostream>

using namespace std;

class Point
  {
  public:
      Point();
      ~Point(){ }

      void setX (int pointX) {x = pointX; }
      void setY (int pointY) {y = pointY; }
      int getX() { return x; }
      int getY() { return y; }

  private:
      int x;
      int y;
  }; 

Point::Point()
    {
        x = 0;
    y = 0;
    }

struct arc {
  int id;
  vector<Point> xY;
};

int main(){

  arc arcStruc;
  vector<Point> pointClassVector;
  int Id;
  int X;
  int Y;
  // other fields go here

  arc *a;

  int m = 2; // Just create two arcs for now
  int k = 3; // each with three points in it
  for (int n=0; n<m; n++){    
    a = new arc;
    Id = n+1;
    arcStruc.id = Id;
    Point pt;
    for (int j=0; j<k; j++){            
      X = n-1;
      Y = n+1;      
      pt.setX(X);
      pt.setY(Y);
      arcStruc.xY.push_back(pt);

    }
  }

for (vector<Point>::iterator it = arcStruc.xY.begin(); it != arcStruc.xY.end(); ++it)
  {
    cout << arcStruc.id.at(it);
    cout << arcStruc.xY.at(it);
  }

  delete a;  
  return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
类点
{
公众:
点();
~Point(){}
void setX(int pointX){x=pointX;}
void setY(int pointY){y=pointY;}
int getX(){return x;}
int getY(){return y;}
私人:
int x;
int-y;
}; 
点::点()
{
x=0;
y=0;
}
结构弧{
int-id;
向量xY;
};
int main(){
弧构造;
向量点类向量;
int-Id;
int X;
int-Y;
//其他领域都在这里
弧*a;
int m=2;//现在只创建两个圆弧
int k=3;//每个都有三个点

对于(int n=0;n有几点建议:

  • 不必为单独的
    pointClassVector
    操心,只需创建点对象,而是使用
    arcStruc.xY.push_back()
    ,将点对象直接放入arcStruc.xY。行
    arcStruc.xY=pointClassVector
    触发整个向量的副本,这有点浪费CPU周期
  • 绝对没有必要尝试在堆上创建
    对象,所做的只是增加复杂性。只需使用
    点pt;
    并在其上调用set函数-虽然我个人会完全取消set函数并直接操作点中的数据,但不需要getter/setter和他们不会给你买任何东西。如果这是我的代码,我会编写点构造函数,以x和y为参数,这会为你节省大量不必要的代码。你也不需要为析构函数提供实现,编译器生成的就可以了
如果要遍历向量,可能应该使用迭代器,而不是尝试索引到容器中。无论哪种方式,都可以访问
arcStruc.xY
以获取其大小,然后使用
[]
操作符或使用迭代器分别访问元素,如下所示:

 for (vector<Point>::iterator it = arcStruc.xY.begin(); it != arcStruc.xY.end(), ++it)
 {
    ... do something with it here, it can be derefernced to get at the Point structure ...
 }
for(vector::iterator it=arcstrc.xY.begin();it!=arcstrc.xY.end(),++it)
{
…在这里用它做点什么,它可以在点结构上被削弱。。。
}

有几点建议:

  • 不必为单独的
    pointClassVector
    操心,只需创建点对象,而是使用
    arcStruc.xY.push_back()
    ,将点对象直接放入arcStruc.xY。行
    arcStruc.xY=pointClassVector
    触发整个向量的副本,这有点浪费CPU周期
  • 绝对没有必要尝试在堆上创建
    对象,所做的只是增加复杂性。只需使用
    点pt;
    并在其上调用set函数-虽然我个人会完全取消set函数并直接操作点中的数据,但不需要getter/setter和他们不会给你买任何东西。如果这是我的代码,我会编写点构造函数,以x和y为参数,这会为你节省大量不必要的代码。你也不需要为析构函数提供实现,编译器生成的就可以了
如果要遍历向量,可能应该使用迭代器,而不是尝试索引到容器中。无论哪种方式,都可以访问
arcStruc.xY
以获取其大小,然后使用
[]
操作符或使用迭代器分别访问元素,如下所示:

 for (vector<Point>::iterator it = arcStruc.xY.begin(); it != arcStruc.xY.end(), ++it)
 {
    ... do something with it here, it can be derefernced to get at the Point structure ...
 }
for(vector::iterator it=arcstrc.xY.begin();it!=arcstrc.xY.end(),++it)
{
…在这里用它做点什么,它可以在点结构上被削弱。。。
}

你的意思是这样的吗(参见我编辑的解决方案?)。现在它在
arcStruc.xY.push_back(pt.getX());
上失败了当然,但是我不明白从你的回答中你如何使用
arcStruc.xY.push_back()
。你想使用arcStruc.xY.push_back(pt)由于您希望将整个点对象添加到向量中,而不是向量的一部分。非常感谢您的时间,我不知道您可以在push_back()中只添加一个值。最后一个问题:如何迭代struc?在上面的代码中(再次编辑)我在循环中添加了
你是否在错误的间接层次上工作。迭代器已经指向向量中的
元素,因此你需要使用
cout谢谢,如果我想覆盖struc元素中的值,我需要定义哪个操作符?比如(循环内部)
*it=myNewValue;
你的意思是这样的吗(参见我编辑的