84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
vector<int> v = { 1,2,3 }; for (auto b = v.begin(); b != v.end(); ++b) cout << *b << endl;
C++的迭代器的end()为什么指向最后元素的下一个位置,然后用!=运算符判断,而不是指向最后一个元素,用==运算符判断呢?
指向最后元素的下一个位置的话不能解引用,感觉不如直接指向最后元素方便啊。
认证0级讲师
如果end是最後一個元素,那begin就得是第一個元素的前導元素,就像java那樣,不然你讓空容器怎麼辦?
只不過c++採用了尾後元素這種設計風格罷了。
如果迭代器設計成end()指向最後一個元素,那麼迭代該怎麼寫?
for (auto b = v.begin(); ; ++b) { cout << * b << endl; if(b == v.end()) break; }
這樣優雅嗎?而且v如果是空的,還要增加判斷邏輯。
不對稱實現通用型更方便,不對稱在用來二分搜尋時更清晰。
如果指向最後一個元素,那麼表達式將為false導致最後一個元素不會被這樣的循環遍歷到。
如果指向最後一個元素,使用迭代器iterator循環遍歷或處理的時候最後一個元素該怎麼辦。
如果end是最後一個元素,那begin就得是第一個元素的前導元素,就像java那樣,不然你讓空容器怎麼辦?
只不過c++採用了尾後元素這種設計風格罷了。
如果迭代器設計成end()指向最後一個元素,那麼迭代該怎麼寫?
這樣優雅嗎?而且v如果是空的,還要增加判斷邏輯。
不對稱實現通用型更方便,
不對稱在用來二分搜尋時更清晰。
如果指向最後一個元素,那麼表達式將為false
導致最後一個元素不會被這樣的循環遍歷到。
如果指向最後一個元素,使用迭代器iterator循環遍歷或處理的時候最後一個元素該怎麼辦。