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

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

Linda Hamilton
Linda Hamilton原创
2024-11-04 01:26:301038浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn