2014-09-19 64 views
4

我能否总是用下面代码中的方式代替InputIterator的指针?我可以总是用常规指针替代输入迭代器吗?

int a[] = {5, 6, 7, 8, 9, 10}; 
std::list<int> l(a, a + 4); // 5, 6, 7, 8 

的构造函数声明为列表(留出分配器部分)

list (InputIterator first, InputIterator last); 

但是从C++引用它似乎像什么,它支持行动,如++(增量)和*(解除引用)可以用作InputIterators?

谢谢。

+0

可能的重复[如何迭代器和指针相关?](http://stackoverflow.com/questions/2728190/how-are-iterators-and-pointers-related) – 2014-09-19 20:50:37

回答

6

C++标准部§24.2.1 [iterator.requirements.general]:

迭代器是指针允许C++程序 与不同的数据结构工作的概括(容器)以统一的 的方式。

[...]

由于迭代器是指针的抽象,它们的语义是在C 概括的最指针的语义++。 这个 确保每个使用迭代器的函数模板都可以像常规指针那样工作为 。

所以,是的,需要一种期望一个迭代器(如标准中定义)的函数模板时,与普通指针调用工作。

特别地,指针尊重任何标准的C++类的迭代器的所有要求(包括输入迭代)

+0

好的,你打败了我。 24.4.1/3是相关的:专业化'模板 iterator_traits ' – rici 2014-09-19 20:43:22

+0

我明白了,我会考虑更多一点。谢谢! – jensa 2014-09-19 20:47:24

+1

@quantdev:在您删除它之前,我已阅读您的评论=)谢谢! – jensa 2014-09-19 20:53:58

3

是的,可以。迭代器类别形成一个层次结构。每个级别都包含上面的级别(或以下,取决于你如何编写它)。

前向迭代器满足输入迭代器的所有需求,然后满足一些需求。双向迭代器支持前向迭代器的所有需求,然后支持一些。最后,随机访问迭代器是所有的最有能力的迭代器,满足双向迭代器的所有需求,然后是一些。

指针是随机访问迭代器,因此它们满足输入迭代器的所有需求。