gpt4 book ai didi

c++ - 为什么使用 != 来比较循环条件中的迭代器

转载 作者:行者123 更新时间:2023-12-01 23:12:09 26 4
gpt4 key购买 nike

在许多有关迭代 vector 的示例中,我注意到不等于运算符通常用于检查循环是否已到达 vector 的末尾。通常,我在循环条件中使用低于运算符。因此,我想知道,选择 != 的理由是什么?

例子:

std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto iter = vec.begin(); iter != vec.end(); iter++) {
std::cout << *iter << " ";
}

最佳答案

因为并非所有迭代器都支持排序,但都可以在 O(1) 中比较所有迭代器是否相等。

例如,关联(有序)容器使用双向迭代器,定义为 ( cppreference):

template<class I>
concept bidirectional_iterator =
std::forward_iterator<I> &&
std::derived_from</*ITER_CONCEPT*/<I>, std::bidirectional_iterator_tag> &&
requires(I i) {
{ --i } -> std::same_as<I&>;
{ i-- } -> std::same_as<I>;
};

std::forward_iterator只能取消引用,复制,== , 并递增。

另一方面,std::vector 使用的随机访问迭代器需要 std::totally_ordered<I> .所以在你的情况下你可以写 iter < vec.end(); ,但代码将变得不那么通用。只要您不在循环体中递增迭代器,无论如何您都是安全的。

关于c++ - 为什么使用 != 来比较循环条件中的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69720494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com