首页 > 后端开发 > C++ > 你能比较 C 中不同容器的迭代器吗?

你能比较 C 中不同容器的迭代器吗?

Linda Hamilton
发布: 2024-11-04 01:26:30
原创
1068 人浏览过

Can You Compare Iterators from Different Containers in C  ?

比较不同容器中的迭代器:一个警示故事

在 C 中,迭代器提供了一种强大的遍历集合的机制。然而,在使用来自不同容器的迭代器时,重要的是要意识到这些限制。

比较来自不同容器的迭代器是否合法的问题经常出现。考虑以下示例:

<code class="cpp">std::vector<int> foo;
std::vector<int> bar;

std::cout << (foo.begin() == bar.begin());</code>
登录后复制

这个表达式乍一看似乎无害,但它实际上会产生未定义的行为。根据 C 11 标准,迭代器只有引用相同序列的元素才能进行比较。由于 foo 和 bar 是两个不同的向量,因此它们的迭代器不具有可比性。

LWG 问题 #446 中进一步强调了这种行为:

“直接或间接评估任何比较函数或以两个迭代器值作为参数的二元 - 运算符是从两个不同范围 r1 和 r2 (...) 获得的,这两个范围不是一个公共范围的子范围,除非另有明确说明,否则未定义。”

此限制对于实现自定义迭代器具有重要意义。如果您计划为自定义迭代器实现运算符 ==,则必须确保它仅比较同一范围内的迭代器。

不遵守此规则可能会导致意外行为,并最终产生有害影响到你的代码的可靠性。因此,重要的是要记住,在 C 中严格禁止比较来自不同容器的迭代器。

以上是你能比较 C 中不同容器的迭代器吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板