创建不存储value_type的输入迭代器
Crafting an InputIterator that does not store the value_type
我正在创建一个InputIterator
建模的类型。 在我的应用程序中,"跳过前十万个元素"是一件合理的事情,并且创建value_type
的成本很高,因此我希望我的迭代器仅在取消引用时创建value_type
,而不是在递增时创建。
我可以轻松地按值返回operator*
value_type
。 但我不知道该怎么办operator->
. 如果我的迭代器不存储value_type
,如何返回指针? 我害怕一辈子的问题,不想被烧伤。
我曾考虑过不提供operator->
,但那样我就不会有一个完整的InputIterator
。
我相信从
迭代器的operator->
按值返回代理对象是可行的。 代理将具有单个value_type数据成员,并且其自己的operator->
返回指向该数据成员的指针。
代理对象的生存期与任何其他按值返回对象相同(如我的 operator*
计划),因此尽管我确实有一个指向临时的指针,但在这些情况下,它会在销毁代理对象之前被消耗。
相关文章:
- 如何从高性能的输入迭代器返回变体?
- 如何实现构造函数,使其仅接受使用 typeid 的输入迭代器?
- 输入迭代器是否可以仅在赋值的右侧符号上取消引用?
- 输入迭代器的相等性比较
- 取消引用的输入迭代器的地址?istream_iterator的情况
- 为什么输入迭代器在递增后会使自身失效?
- 从 std::copy 和 std::copy_n 中提取输入迭代器
- 输入迭代器 - 星号和后缀运算符
- 输入迭代器可以重复读取,而输出迭代器只能写入一次
- 使用输入迭代器再次遍历容器
- 创建不存储value_type的输入迭代器
- 输入迭代器的示例`end()`实际上表示一个past-end-end
- 输入迭代器必须具有常量解引用运算符吗
- shared_ptr的输入迭代器
- C++Spirit Boost:将输入迭代器转换为前向迭代器
- 递增可变输入迭代器是否会使旧迭代器值失效
- <algorithm>在同一输入迭代器范围内并排运行两个
- 运算符 -> 不适用于自定义输入迭代器
- 从输入迭代器获取最后一项
- 异常规范和标准输入迭代器