问题相关代码
for (list<int>::const_iterator it = l.begin(); it != l.end(); it++) //不能用<,不然会报错
{
cout << *it << " ";
}
代码功能
遍历list容器
疑惑
为什么for循环的条件表达式里只能用!=,不能用<呀?之前遍历vector和deque的时候都可以用<呀。难道跟list的迭代器是双向迭代器而不是随机迭代器有关?求解答
for (list<int>::const_iterator it = l.begin(); it != l.end(); it++) //不能用<,不然会报错
{
cout << *it << " ";
}
遍历list容器
为什么for循环的条件表达式里只能用!=,不能用<呀?之前遍历vector和deque的时候都可以用<呀。难道跟list的迭代器是双向迭代器而不是随机迭代器有关?求解答
std::list
的iterator
和const_iterator
必须满足LegacyBidirectionalIterator
要求,而LegacyBidirectionalIterator
存在下面关系LegacyBidirectionalIterator -> LegacyForwardIterator -> LegacyInputIterator
其中LegacyInputIterator
只要求迭代器满足EqualityComparable
要求,即表达式i==j
合法,从而表达式i!=j
可以等价于!(i==j)
。
因此std::list
的迭代器类型没有被要求重载<
运算符
而std::vector
和std::dequeue
的迭代器都必须满足LegacyRandomAccessIterator
要求,其中就要求表达式a < b
必须合法,因此迭代器类型必须重载<
运算符
https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator
https://en.cppreference.com/w/cpp/named_req/InputIterator
https://en.cppreference.com/w/cpp/named_req/RandomAccessIterator