【问题标题】:What is prev(X) if X is the iterator S.begin() for some ordered container S, e.g. S is a set?如果 X 是某个有序容器 S 的迭代器 S.begin(),那么 prev(X) 是什么,例如S是一个集合?
【发布时间】:2019-03-02 07:00:01
【问题描述】:

如果X 是某个有序容器S 的迭代器S.begin(),那么prev(X) 是什么,例如Sset?我原以为它会变成S.end(),但这似乎不正确。

【问题讨论】:

  • 为什么你希望endbegin 之前?迭代器不会“环绕”。
  • 如果一个不可减量的迭代器(例如前面的迭代器)被减量,则行为未定义。
  • @p0pa 你可以把它变成一个体面的答案,例如只需添加指向一些适当文档(甚至标准...)的链接。

标签: c++ iterator set


【解决方案1】:

这会导致未定义的行为。 来自cppreference.com

如果指定的递增或递减序列需要递增一个不可递增的迭代器(例如过去的迭代器),或者一个不可递减的迭代器(例如前端迭代器),则行为未定义或单数迭代器)递减。

【讨论】:

  • 它可能是S.end() 作为未定义行为的表现。如果 end 被实现为哨兵节点,则尤其可能适用于 std::list。
  • 前两句相互矛盾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
相关资源
最近更新 更多