她叫谢雨路 2022-03-23 18:45 采纳率: 33.3%
浏览 23

C++,list容器相关问题

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

遍历list容器

疑惑

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

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-03-24 05:24
    关注

    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

    评论

报告相同问题?

问题事件

  • 创建了问题 3月23日

悬赏问题

  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑