我是否总能以下面代码中的方式替换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?
谢谢。
答案 0 :(得分:6)
C ++标准部分§24.2.1[iterator.requirements.general]:
迭代器是指针的泛化,允许C ++程序 使用统一的不同数据结构(容器) 方式。
[...]
由于迭代器是指针的抽象,因此它们的语义是一个 C ++中大多数指针语义的泛化。 :此 确保每个采用迭代器的函数模板都能正常工作 以及常规指针。
所以是的,任何需要迭代器的函数模板(在标准中定义)都需要在使用常规指针调用时才能工作。
特别是,指针尊重任何标准C ++迭代器类的所有要求(包括输入迭代器)
答案 1 :(得分:3)
是的,你可以。迭代器类别构成一个层次结构。每个级别包括上面(或下面的级别,取决于你如何写它)。
前向迭代器满足Input迭代器的所有要求,然后是一些。双向迭代器支持前向迭代器的所有要求,然后是一些。最后,随机访问迭代器,它是所有函数中最有能力的迭代器,满足双向迭代器的所有要求,然后是一些。
指针是随机访问迭代器,因此,它们满足输入迭代器的所有要求。