c++ - 如何遍历作为结构一部分的向量?
问题描述
我有以下两个用于定义行的结构:
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 循环和结构化绑定声明功能。
推荐阅读
- powershell - Powershell .value 与 .values
- javascript - 如何获取为浏览器上的文件输入选择的图像尺寸
- angular - ag-Grid:我如何对 ICellRendererAngularComp 进行单元测试
- bash - awk 和 printf 插入额外的换行符
- c# - AJAX 成功/错误功能不起作用
- go - Golang:如何将 time.Time 转换为 Protobuf 时间戳?
- ios - 根据 MapKit 中的缩放级别动态更改 MKAnnotationView?
- html - 视图 account.views.updatedata 没有返回 HttpResponse 对象。它返回 None 而不是
- bamboo - /media/atlassian-data 文件系统已 100% 满
- sql - 通过 UDF 表插入表不能从存储过程中工作