首页 >后端开发 >C++ >可以在 C 中比较来自不同容器的迭代器吗?

可以在 C 中比较来自不同容器的迭代器吗?

Patricia Arquette
Patricia Arquette原创
2024-11-01 14:35:29630浏览

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