【问题标题】:Empty std::vector begin != end [duplicate]空 std::vector 开始!= 结束 [重复]
【发布时间】:2016-04-08 18:25:50
【问题描述】:

我想知道是否有人有空向量的经验,但开始和结束迭代不一样?

谢谢

【问题讨论】:

  • 奇怪...你有代码示例来证明这个问题吗?
  • 考虑到,对于一个空的std::vectorbegin() 等于end() 是一个严格的要求,我怀疑以前是否有人观察过这一点。除非我们不是在谈论 C++ 或兼容的 C++ 实现。在这种情况下,您使用的是什么编译器和平台?
  • 我似乎记得曾经遇到过这种情况,但可能至少在 20 年前(也许更久),整个“STL”东西还是新事物,而且 bug 很常见。
  • 是的,我知道一般来说不可能,但我在 Windows 10 上有这个。由于源代码已关闭,我无法复制过去的部分内容。我在这里写到有人有这样的情况,可以给我一些信息是什么问题,谢谢
  • 我宁愿关闭它而不是重复,而是因为缺少 MCVE。但当然关闭。

标签: c++ vector stl std


【解决方案1】:

这应该是不可能的。 [container.requirements.general]/6 中的标准状态

begin() 返回一个引用容器中第一个元素的迭代器。 end() 返回一个迭代器 是容器的结束值。如果容器是空的,那么begin() == end();

所以如果contianer.empty() == true 那么container.begin() 必须等于container.end()

【讨论】:

  • 我知道标准在说什么,但请保持开放的心态,不要将其视为自然法则。可能有这种情况,如果有人有这种情况,我只是在徘徊
  • 我并不是没有思想开放,我只是根据标准说明它不可能发生。如果是,那么您的实现中存在错误,需要修复。
  • @IrakliDarbuashvili:这些是规则,我不知道当前有哪个 C++ 实现无法满足这些规则。由于您认为提供和 MCVE 以某种方式泄露了秘密信息,我更倾向于相信,您不是很有经验,而且您观察到的是代码中的错误,或者对您的观察结果的误解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多