关于循环和迭代器的c++11范围

About c++11 range for loops and iterators

本文关键字:迭代器 c++11 范围 于循环 循环      更新时间:2023-10-16

循环的c++11范围是什么导致的:

std::list<Point> item;
....
//fill the list somewhere else
....
for(Point p : item) {
    p.lowerY();
}

只工作一次(即lowerY()只做一次它应该做的事情,但下次到达这个循环时,它什么都不做),但这是:

list<Point>::iterator it;
for (it = item.begin();it != item.end();++it) {
    it->lowerY();
}

每次都能完美工作。有什么区别?

在以前的代码中,行

for(Point p : item) {

每次访问下一个项目时都会创建该点的副本。为了确保方法lowerY()的调用有效,您需要将其重新定义为

for(Point & p : item) {