比較不同容器中的迭代器
使用容器時,了解比較不同容器中迭代器的含義至關重要。問題出現了:是否允許比較屬於不同容器的迭代器?
考慮以下程式碼:
<code class="cpp">std::vector<int> foo; std::vector<int> bar; std::cout << (foo.begin() == bar.begin());</code>
表達式 foo.begin() == bar.begin()產生 false 或導致未定義的行為?
深入研究C 11 標準(n3337) 可以闡明這個困境:
同一序列中的迭代器
比較不同容器的迭代器
考慮到這些要求,比較來自不同容器的迭代器是未定義的行為。
LWG 問題#446
LWG 問題#446 明確解決了這個問題,建議對標準添加以下內容:
「直接或間接評估任何比較函數或二元- 運算符,以兩個迭代器值作為參數,這兩個迭代器值是從兩個不同範圍r1 和r2 [...] 獲得的,這兩個範圍不是一個公共範圍的子範圍,這是未定義的,除非另有明確說明。遵守此約束至關重要。
以上是在 C 中比較來自不同容器的迭代器是否有效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!