首页 > 解决方案 > 如何遍历作为结构一部分的向量?

问题描述

我有以下两个用于定义行的结构:

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;
    }
}

但是,这不起作用。有人可以解释我为什么吗?

标签: c++structiterator

解决方案


您的示例中只有语法错误。固定的:

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 循环结构化绑定声明功能。


推荐阅读