我是否可以总是用常规指针替换输入迭代器?

时间:2014-09-19 20:36:23

标签: c++

我是否总能以下面代码中的方式替换InputIterators的指针?

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?

谢谢。

2 个答案:

答案 0 :(得分:6)

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

  

迭代器是指针的泛化,允许C ++程序   使用统一的不同数据结构(容器)   方式。

     

[...]

     

由于迭代器是指针的抽象,因此它们的语义是一个   C ++中大多数指针语义的泛化。 :此   确保每个采用迭代器的函数模板都能正常工作   以及常规指针。

所以是的,任何需要迭代器的函数模板(在标准中定义)都需要在使用常规指针调用时才能工作。

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

答案 1 :(得分:3)

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

前向迭代器满足Input迭代器的所有要求,然后是一些。双向迭代器支持前向迭代器的所有要求,然后是一些。最后,随机访问迭代器,它是所有函数中最有能力的迭代器,满足双向迭代器的所有要求,然后是一些。

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