首頁  >  文章  >  後端開發  >  可以在 C 中比較來自不同容器的迭代器嗎?

可以在 C 中比較來自不同容器的迭代器嗎?

Patricia Arquette
Patricia Arquette原創
2024-11-01 14:35:29536瀏覽

Can Iterators from Different Containers be Compared in C  ?

比較不同容器的迭代器

在 C 中,在處理不同容器時了解控制迭代器比較的原則非常重要。問題出現了:「比較不同容器的迭代器是否可以接受?」

為了回答這個問題,我們參考C 11 標準(n3337):

  • 一般迭代器要求: 僅當應用i 有限多次導致i == j 時,迭代器j 才能從迭代器i 到達。可到達的迭代器引用相同序列的元素。
  • 前向迭代器和相等:前向迭代器的相等運算子 (==) 的域僅限於源自相同的底層序列。

由於 RandomAccessIterator 繼承了 ForwardIterator 的要求,因此比較來自不同容器的迭代器是未定義的行為。

LWG 問題#446 特別解決了這個問題並提出了建議對標準的以下修訂:

「使用從兩個不同範圍r1 和r2 獲取的兩個迭代器值作為參數直接或間接評估任何比較函數或二元- 運算符的結果是未定義的,除非明確定義」

此修正案強調比較來自不同容器的迭代器,除非它們是公共範圍的子範圍,否則是未定義的行為。

以上是可以在 C 中比較來自不同容器的迭代器嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn