[英]How to iterate through a vector that is part of a struct?
我有以下两个用于定义行的结构:
struct Point{
double x;
double y;
};
struct Line {
unsigned int n_points;
std::vector<Point> points;
};
添加一些数据后,我想遍历points
向量。 我试过了
int main(){
Line line;
// add some data to points vector with `push_back`
// print content of `points`
iter = line.points.begin();
for(; iter != line.points.end(); ++iter){
std::cout << iter.x << " " << iter.y << std::endl;
}
}
但是,这不起作用。 有人可以解释我为什么吗?
您的示例中只有语法错误。 固定的:
int main(){
Line line;
//vvv added auto
auto iter = line.points.begin();
for(; iter != line.points.end(); ++iter){
// vvvvvvv iter->x instead of iter.x. Same for iter.y
std::cout << iter->x << " " << iter->y << std::endl;
}
}
但是,使用现代 C++,您可以更轻松地执行相同操作:
int main() {
Line line;
// vvv make a reference if that matters
for (auto const [x, y] : line.points) {
std::cout << x << ' ' << y << '\n';
}
}
此版本分别使用 C++11 和 C++17中的基于范围的 for 循环和 结构化绑定声明功能。
您的代码中存在语法错误。 假设您之前定义了iter
的类型,或者您可以使用: auto iter = line.points.begin();
这里, iter
是一种迭代器。 一个.
运算符不起作用,您需要像指针一样使用->
运算符,如下所示:
auto iter = line.points.begin();
for(; iter != line.points.end(); ++iter){
std::cout << iter->x << " " << iter->y << std::endl;
}
您可以参考这里了解更多信息http://www.cplusplus.com/reference/iterator/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.