这里是我遇到的问题,如果我没有很好地解释它或者代码质量很差,请不要殴打我 - 我到目前为止只做了大约2周的C++ 。访问C++结构的各个元素
说明:我想构建一个结构(一个结构可能不是最好的决定,但我必须从某处开始),它将包含一组点的坐标(仅限x和y)(我们称之为设置弧),设置ID(可能还有其他字段)。每组(弧)可以包含各种数量的点。 我已经在集合(弧)中实现了每个点作为类,然后我的弧结构在矢量中包含了这个类的各种实例(以及其他东西)。弧形结构的
实施例:
Struc1:
ID(INT)1
XY(矢量)(0; 0)(1; 1)(2; 2)
Struc2:
ID( INT)2
XY(矢量)(1; 1)(4; 4)
问题: 我不能找出如何我的弧形结构内访问元素:例如,如果我需要要使用Id 1访问结构中第二个点的坐标,我想要Struc1.xY[1]
,但是这不起作用,因为我的代码(如下)所示。 我发现this post解释了如何在结构中打印值,但我需要访问这些元素(稍后)有条件地编辑这些坐标。这如何被强制?
我尝试:(编者)
#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;
}
做你的意思是这样的(见我的编辑解决方案?)。就目前而言,它在'arcStruc.xY.push_back(pt.getX());'上失败了,'但是我从你的回答中不明白你如何使用'arcStruc.xY.push_back()'。 – Aina
您想要使用arcStruc.xY.push_back(pt),因为您要将整个Point对象添加到矢量中,而不是其中的一部分。 –
非常感谢您的时间,我不知道您可以在push_back()内部放置任何值,但只有一个值。最后一个问题:我如何迭代struc?在我上面的代码中(再次编辑),我已经在循环中添加了'cout << arcStruc.xY.at(it);'但它会抛出一个错误。我也尝试过'cout << arcStruc.xY [it];'但它也抛出了一个错误,这样做的正确方法是什么? – Aina