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

时间:2015-11-18 22:01:25

标签: c++ c++11 for-loop syntax

循环的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();
}

每次都很完美。有什么区别?

1 个答案:

答案 0 :(得分:1)

在您以前的代码中,行

for(Point p : item) {
每次访问下一个项目时,

都会创建该点的副本。要确保调用方法lowerY()有效,您需要将其重新定义为

for(Point & p : item) {