繁体   English   中英

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

[英]About c++11 range for loops and iterators

导致循环的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) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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