簡體   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