【问题标题】:What's the iterator types of sequence containers?序列容器的迭代器类型是什么?
【发布时间】:2017-02-04 05:04:56
【问题描述】:

当我阅读C++ 编程语言时,我发现这一段说

传递给 inserter() 的迭代器必须是容器中的迭代器。对于序列容器,这意味着它必须是双向迭代器(以便您可以在它之前插入)。例如,您不能使用 inserter() 制作迭代器以插入到 forward_list...

所以我开始寻找标准的相关部分来验证这个陈述。然而,这一段(23.2.6 [associative.reqmts] 第 6 段)只与 associative container 相关:

关联容器的迭代器属于双向迭代器类别...

在哪里可以找到标准中序列容器的迭代器类型?

【问题讨论】:

  • 不是标准,而是good reference
  • @πάνταῥεῖ 我也知道 std::iterator_traits,但我认为这是在编译时完成的。你的意思是说序列容器的迭代器类型是实现定义的,所以不能在标准中说明?

标签: c++ iterator language-lawyer


【解决方案1】:

标准规定单独用于序列容器。例如

对于forward_­list

forward_­list 是一个容器,它支持前向迭代器和...

对于deque

deque 是支持随机访问迭代器 ([random.access.iterators]) 的序列容器。

您可以期望序列容器的迭代器类别至少是前向迭代器类别。

【讨论】:

  • 其他序列容器的迭代器好像是implementaion-defined。我有点好奇,虽然它们是实现定义的,但是否有任何类型的下限可以保证这些容器具有一定程度的迭代器。
  • @Il-seobBae 它们不是实现定义的,标准只是单独指定它们。在 N4606 中有一条关于序列容器的声明,“序列容器的迭代器和 const_iterator 类型应至少属于前向迭代器类别。”
  • @Il-seobBae - 未指定迭代器的实际类型;实现编写自己的类型。 (这不是“实现定义的”,因为标准规定,当定义了实现时,实现必须记录它的作用)。标准要求迭代器满足一定的要求,例如是前向迭代器或随机访问迭代器。这限制了实现可以做什么,而不需要任何特定的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2021-08-19
  • 2023-03-04
  • 2020-06-29
  • 2011-01-19
相关资源
最近更新 更多