任何人都可以解釋我是什麼意思past-the-end
。爲什麼我們稱end()
函數爲過去式?什麼是STL C++中的過去式迭代器?
回答
功能begin()
和end()
定義半開區間([begin, end)
),這意味着:
範圍包括第一個元素,但不包括最後一個元素。因此,這個名字結束了。
一個半開放範圍的優點是:
它避免了空的範圍進行特殊處理。對於空白區域,
begin()
等於end()
。這使得最終的標準簡單爲遍歷元素的循環:該循環簡單 只要繼續
end()
沒有達到
從字面上看,因爲它指向數組的末尾。
它被使用,因爲那個元素是空的,並且可以迭代到,但不能被解除引用。
int arry[] = {1, 2, 3, 4, /* end */ };
^^^^^^^
std::end(arry) would point here.
不只是數組;無論迭代器來自哪裏或哪些值被保存,「end」迭代器都會指向目標序列的末尾。 – 2013-03-06 16:59:15
因爲它並不指向容器的最後元素,但在某處過去容器的最後一個元素。
如果您解除引用end()
,那麼結果爲未定義的行爲。
像數學中的區間一樣,stl使用[begin, end)
。
這就是爲什麼我們可以寫for (auto it = v.begin(); it != v.end(); ++it)
是的!第一個不談容器的答案,不需要創建序列。 – 2013-03-06 17:00:09
添加另一點以上正確答案。 這也是爲了與數組兼容。 例如在下面的代碼:
char arr[5];
strcpy(arr, "eakgl");
sort(&arr[0], &arr[5]);
這將工作正常。
相反,如果你給了:
sort(&arr[0], &arr[4]);
會錯過排序的最後一個字符。
這也有助於自然地表示空容器。
- 1. C++中STL迭代器的大小是什麼
- 2. 什麼是迭代器,C++?
- 3. 爲什麼在C++ STL中分離算法,迭代器和容器STL
- 4. STL容器迭代器和C指針迭代器有什麼區別
- 5. C++ STL迭代器接口
- 6. C++ STL列表迭代器
- 7. 爲什麼不能int型是STL向量中的迭代器?
- 8. STL中迭代器的類型是什麼?
- 9. 如何創建過去式迭代器?
- 10. STL迭代器:container.end()
- 11. C++迭代器做什麼?
- 12. 在迭代器中使用STL容器常見的誤用是什麼?
- 13. 什麼是SCARY迭代器?
- 14. 寫迭代器的STL
- 15. 迭代器和STL容器
- 16. STL向量,迭代器和插入(C++)
- 17. C++:使用常量與STL迭代器
- 18. C++ STL:問題與迭代器
- 19. C++ STL,常量迭代器,find()
- 20. 比較C++ STL列表迭代器
- 21. C++ STL unordered_map迭代器問題
- 22. C++ STL;迭代包含STL容器的類嗎?
- 23. 什麼是STL迭代器上下文中的奇異值和非奇異值?
- 24. 爲什麼STL中List的迭代器使用(* node).data而不是node-> data?
- 25. 啓用STL迭代器調試真的能做什麼?
- 26. STL迭代器重置
- 27. STL地圖迭代器集
- 28. STL迭代器和'const'
- 29. STL,列表,迭代器
- 30. 定製STL迭代器類
+1很好的答案。 – Nawaz 2013-03-06 16:17:30
插圖聞起來像Josuttis :) – fredoverflow 2013-03-06 16:30:36
不僅僅是'begin()'和'end()';一般來說,'[begin,end]'定義了一個**序列**的值,而不管迭代器來自何處或哪些值被保存。 – 2013-03-06 16:58:39