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

Can I always substitute regular pointers for input iterators?

本文关键字:输入 迭代器 指针 常规 我可以      更新时间:2023-10-16

我是否可以始终以下面代码中示例的方式替换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++引用来看,似乎任何支持++(增量)和*(取消引用)等操作的东西都可以用作InputIterator?

谢谢。

C++标准章节§24.2.1[iterator.requestions.general]:

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

[…]

由于迭代器是指针的抽象,因此它们的语义是C++中大多数指针语义的泛化这个确保使用迭代器的每个函数模板很好地使用常规指针

因此,是的,任何期望迭代器(如标准中定义的)的函数模板在使用常规指针调用时都需要工作。

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

的所有要求

可以。迭代器类别形成一个层次结构。每个级别都包括上面的级别(或下面的级别,取决于你的写作方式)。

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

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