在C++中,是否可以实现一个迭代器接口,其中推进会使"current"元素无效?
In C++, is it okay to implement an iterator interface in which advancing invalidates the "current" element?
我正在设计一个c++接口,允许用户迭代从文件解码的对象。这个解码过程有点慢。
我正在考虑为此提供一个迭代器接口,但我想避免任何不必要的复制,所以我在考虑(用户端):
for (const auto& object : file) {
// you can access the members of `object` here
std::cout << object.whatever() << std::endl;
// you can copy `object` here
myObjectCopy = object;
// you CANNOT do this because `object` changes
// as soon as the iterator advances
myObjectPtr = &object;
}
上面的例子中的object
是对迭代器实例内部对象的引用。
这是错的吗?您还能推荐哪些惯用接口呢?
我想到了一个流接口(想想std::istream
),但是AFAIK,读取数据的方法也返回副本(他们提取字符)。
听起来你说的是一个输入迭代器
确保从std::iterator<std::input_iterator_tag, decoded_object_type>
继承您的自定义迭代器类。一个经典的实现是operator*
缓存解码的对象,并返回缓存的对象,如果它被调用第二次之前operator++
被调用;和operator++
调用operator*
来确保对象被解码,如果它还没有。
可以。iostream基本上是相同的:如果你对从它得到的值进行迭代,你可以复制它们,但在流或流上的迭代器进阶之后,你不能保留指向它们的指针。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- Windows.h与GLFW.h的接口
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如何绑定 C++ gRPC 客户端的网络接口
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何从实现接口的模板化类实例访问结构
- 带有进度表的 curl 多接口程序
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 我可以在具有一个标头和一个接口的 cpp 文件中有多个嵌入吗?
- 类接口,可以创建N个方法
- 类具有相同的接口,但参数的类型不同
- 如何与 Cheerp/js 中的 extern 变量接口?
- 在C++中,是否可以实现一个迭代器接口,其中推进会使"current"元素无效?