2017-02-04 82 views
2

当我通过阅读C++编程语言,我发现这一段话说什么是序列容器的迭代器类型?

传递给插入迭代器()必须是一个迭代到容器中。对于序列容器,这意味着它必须是双向迭代器(以便您可以在它之前插入)。例如,您不能使用插入()做一个迭代器插入到修饰符Modifiers ...

于是我开始发现,将验证这种说法的标准的相关部分。然而,我留下了本段(23.2.6 [associative.reqmts]段落6)与仅关联容器

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

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

+0

不是_标准_,而是[很好的参考](http://en.cppreference.com/w/cpp/iterator/iterator_traits)。 –

+0

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

回答

2

该标准规定了对于序列容器的分开。例如

对于forward_­list

forward_­list是支持前向迭代和...

deque对于一个容器:

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

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

+0

似乎其他序列容器的迭代器是_implementaion-defined_。我有点好奇,虽然它们是_implementation-defined_,有没有任何种类的下界可以保证这些容器的某些级别的迭代器。 – b1sub

+1

@ Il-seobBae它们不是实现定义的,标准只是单独指定它们。在N4606中有一个序列容器的声明,“序列容器的迭代器和const_iterator类型至少应该是前向迭代器类别。” – songyuanyao

+0

非常感谢。 – b1sub