c++ - 在 C++ 中,是否可以实现推进使 "current"元素无效的迭代器接口(interface)?

标签 c++ c++11 iterator api-design istream-iterator

我正在设计一个 C++ 接口(interface),允许用户迭代从文件解码的对象。这个解码过程有点慢。

我正在考虑为此使用迭代器接口(interface),但我想避免任何不必要的复制,所以我正在考虑(用户方面):

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 是对迭代器实例内部对象的引用。

这是错的吗?您会在这里建议哪些其他惯用界面?

我想到了一个流接口(interface)(想想 std::istream),但是据我所知,读取数据的方法也返回拷贝(它们提取字符)。

最佳答案

听起来你说的是 an input iterator .

请务必从 std::iterator<std::input_iterator_tag, decoded_object_type> 继承您的自定义迭代器类.一个经典的实现是 operator*缓存解码后的对象,如果在 operator++ 之前第二次调用它,则返回缓存的对象被调用;和 operator++调用 operator*以确保对象已被解码(如果尚未解码)。

关于c++ - 在 C++ 中,是否可以实现推进使 "current"元素无效的迭代器接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40426081/

相关文章:

c++ - 遍历子 vector

python - 计数器 most_common 元素作为生成器

python - 从唯一元素列表高效构建 Python 集

C++根据成员 bool 值对 vector 中的对象进行排序

c++ - 函数参数 : const matching declaration and definition

c++ - 使用 pimpl 习惯用法时如何创建私有(private)静态常量字符串

c++ - 指向 std::vector 的指针,指针声明

c++ - 覆盖写入控制台的文本

c++ - 哪个更具可读性 (C++ = )

c++ - 无法使用boost正确序列化数据