比較C 中不同容器的迭代器
在自訂迭代器實現的上下文中,出現了一個基本問題:是否允許比較迭代器來自不同的容器?以下面的程式碼片段為例:
<code class="cpp">std::vector<int> foo; std::vector<int> bar; // Is this expression valid? foo.begin() == bar.begin();</code>
根據C 11 標準:
同一序列中的迭代器:
比較來自不同容器的迭代器:
因此,比較來自不同容器的迭代器,例如上例中的 foo.begin() 和 bar.begin(),被視為未定義行為。
這種未定義行為源自於迭代器引用容器內的特定元素。當迭代器屬於不同容器時,不能假定它們指向同一底層序列中的元素,因此它們的比較會產生未定義的結果。
LWG Issue #446:
為了澄清這個問題,LWG 問題#446 建議將以下文字加入標準:
直接或間接或間接評估任何比較函數或二元- 運算子的結果,其中兩個迭代器值作為從以下位置獲得的參數兩個不同的範圍...是未定義的,除非另有明確說明。
此添加進一步強調了比較來自不同容器的迭代器的未定義性質。
以上是比較 C 中不同容器的迭代器是否定義了行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!