我可以总是用常规指针代替输入迭代器吗
Can I always substitute regular pointers for input iterators?
我是否可以始终以下面代码中示例的方式替换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迭代器的所有要求,然后满足一些要求。双向迭代器支持前向迭代器的所有要求,还有一些要求。最后,随机访问迭代器是所有迭代器中能力最强的,它满足了双向迭代器的所有要求,还有一些要求。
指针是随机访问迭代器,因此,它们满足输入迭代器的所有要求。
相关文章:
- 如何从高性能的输入迭代器返回变体?
- 如何实现构造函数,使其仅接受使用 typeid 的输入迭代器?
- 输入迭代器是否可以仅在赋值的右侧符号上取消引用?
- 输入迭代器的相等性比较
- 取消引用的输入迭代器的地址?istream_iterator的情况
- 为什么输入迭代器在递增后会使自身失效?
- 从 std::copy 和 std::copy_n 中提取输入迭代器
- 输入迭代器 - 星号和后缀运算符
- 输入迭代器可以重复读取,而输出迭代器只能写入一次
- 使用输入迭代器再次遍历容器
- 创建不存储value_type的输入迭代器
- 输入迭代器的示例`end()`实际上表示一个past-end-end
- 输入迭代器必须具有常量解引用运算符吗
- shared_ptr的输入迭代器
- C++Spirit Boost:将输入迭代器转换为前向迭代器
- 递增可变输入迭代器是否会使旧迭代器值失效
- <algorithm>在同一输入迭代器范围内并排运行两个
- 运算符 -> 不适用于自定义输入迭代器
- 从输入迭代器获取最后一项
- 异常规范和标准输入迭代器