【问题标题】:What is the proper/recommended way of getting an std::vector iterator now that std::vector::iterator is legacy?既然 std::vector::iterator 是遗留的,那么获取 std::vector 迭代器的正确/推荐方法是什么?
【发布时间】:2020-12-26 13:18:18
【问题描述】:

来自cppreference

iterator    LegacyRandomAccessIterator
const_iterator  Constant LegacyRandomAccessIterator

它不应该再使用了吗? 获得std::vector iterator 的正确/推荐方式是什么?我们应该使用唯一的auto吗?

【问题讨论】:

  • Legacy 并不代表您认为的意思。您从哪里得到的假设是它暗示了一些弃用的东西?
  • @Fureeish "Deprecated 意味着它会在不久的将来被删除,Legacy 意味着它会因为向后兼容或其他原因而保留。两者都意味着它们不应该被新代码使用。 "谷歌搜索 SO 答案的第一个结果。这个问题与 Java 有关。
  • 标准中已经提到了很多定义的实现。这并不意味着你不能在你的 c++ 代码中安全地使用这些。
  • 这就是你的困惑——你读的是 Java 的答案,而不是 C++ 的答案。这也是关于 API,而不是关于概念的名称(不一定与 <concepts> 相关)。 LegacyIterator is a name。我不知道它为什么会这样命名,但它只是一个名字。
  • 顺便说一句,除了OP做出的混淆假设之外,我认为这是一个很好的问题。命名肯定有原因(已经在答案中提到),我认为人们可能会对这种命名感到困惑,特别是因为没有容易获得的解释。

标签: c++ c++-standard-library


【解决方案1】:

legacy 并不意味着它不受支持或不推荐使用。它只是意味着它不是新的,因此使用术语legacyLegacy 前缀仅用于区分 C++20 的 RandomAccessIterator 和预先存在的 LegacyRandomAccessIterator(两者都是 C++ 的“概念”)。不过,我认为标准中实际上并没有提到 Legacy 这个词。

【讨论】:

  • 标准中没有出现“传统”一词。这是 cppreference.com 的一项发明。我认为一个不那么令人困惑的术语是“经典”。经典没有错。但它们也不是现代的。
  • 是的,你是对的,我做了一些挖掘,我相信网站运营商这样做是为了分隔 wiki 页面,我可能错了。
猜你喜欢
  • 2020-07-23
  • 2020-04-18
  • 2020-09-13
  • 1970-01-01
  • 2013-01-07
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多