gpt4 book ai didi

c++ - 访问 C++ 结构的单个元素

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:32 26 4
gpt4 key购买 nike

这是我遇到的问题,如果我没有很好地解释它或者代码质量很差,请不要打我——到目前为止我只学了大约 2 周的 C++。

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

弧形结构示例:

Struc1:

Id(整数)1

xY( vector )(0;0)(1;1)(2;2)

Struc2:

Id(整数)2

xY( vector )(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;
}

最佳答案

一些建议:

  • 不要为单独的 pointClassVector 而烦恼,只需使用 arcStruc.xY.push_back() 创建点对象并将其直接放入 arcStruc.xY 中。 arcStruc.xY = pointClassVector 行触发了整个 vector 的拷贝,这有点浪费 CPU 周期。
  • 绝对没有必要尝试在堆上创建Point 对象,只会增加复杂性。只需使用 Point pt; 并在其上调用 set 函数 - 虽然我个人会完全取消 set 函数并直接操作 Point 中的数据,但不需要 getters/setters 并且它们不给你买任何东西。如果这是我的代码,我会编写点构造函数以将 x 和 y 作为参数,这样可以为您节省大量不必要的代码。您也不需要为析构函数提供实现,编译器生成一个就可以了。

如果你想遍历 vector ,你应该使用迭代器而不是尝试索引到容器中。无论哪种方式,您都可以访问 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 ...
}

关于c++ - 访问 C++ 结构的单个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13907715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com