C++,list容器相关问题

问题相关代码
for (list<int>::const_iterator it = l.begin(); it != l.end(); it++) //不能用<,不然会报错
{
    cout << *it << " ";
}
代码功能

遍历list容器

疑惑

为什么for循环的条件表达式里只能用!=,不能用<呀?之前遍历vector和deque的时候都可以用<呀。难道跟list的迭代器是双向迭代器而不是随机迭代器有关?求解答

std::listiteratorconst_iterator必须满足LegacyBidirectionalIterator要求,而LegacyBidirectionalIterator存在下面关系
LegacyBidirectionalIterator -> LegacyForwardIterator -> LegacyInputIterator
其中LegacyInputIterator只要求迭代器满足EqualityComparable要求,即表达式i==j合法,从而表达式i!=j可以等价于!(i==j)
因此std::list的迭代器类型没有被要求重载<运算符

std::vectorstd::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