比较不同容器中的迭代器
使用容器时,了解比较不同容器中迭代器的含义至关重要。问题出现了:是否允许比较属于不同容器的迭代器?
考虑以下代码:
<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中文网其他相关文章!