繁体   English   中英

如何遍历作为结构一部分的向量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM