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

jen*_*nsa 4 c++

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

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

列表的构造函数声明是(省略分配器部分)

list (InputIterator first, InputIterator last);
Run Code Online (Sandbox Code Playgroud)

但是从C++引用来看,似乎任何支持诸如++(增量)和*(解引用)等动作的东西都可以用作InputIterators?

谢谢.

qua*_*dev 6

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

迭代器是指针的泛化,它允许C++程序以统一的方式处理不同的数据结构(容器).

[...]

由于迭代器是指针的抽象,因此它们的语义是C++中大多数指针语义的概括.这确保了每个带迭代器的函数模板都可以使用常规指针.

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

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