如何检查是否可以推进简单C++标准库迭代器
How to check if simple C++ standard library iterator can be advanced?
>假设我有一个封装 std 容器的类:
class Stash
{
list<int> Data;
public:
list<int>::const_iterator GetAccess() const { return Data.begin(); }
};
这是强制用户以迭代器的形式读取数据的非常方便的方法。但是,我找不到将迭代器与container.end()
进行比较的方法。所以,我想知道是否有一个选项可以单独通过 stdlib 来完成,或者我必须自己编写迭代器类(例如,使用can_advance
方法)。
相关的问题可能是这个,但它询问迭代器是否有效,而不是它是否可以前进。我找不到有关后者的任何信息。
你不能这样做,单个迭代器在其指向的序列末尾时不包含信息。
通常,这是通过提供一个范围(思考std::make_pair(cont.begin(), cont.end())
)或为您的类提供begin()
和end()
方法来解决的,从而有效地使其成为一个范围。
迭代器成对工作:指向序列开头的迭代器和指向序列末尾的迭代器。这就是为什么所有容器都具有begin()
和end()
成员函数的原因:因此您可以查看容器管理的值序列。
GetAccess
的名称更改为begin
并添加end
会更习惯。拥有end()
还可以将标准算法应用于数据。
您似乎要求的是"展望"迭代器。你可以编写一个类来"调整"迭代器以进行展望,其中适配器只是比你的代码领先一步:
template<class FwdIter>
class lookahead_iterator
{
public:
lookahead_iterator(const FwdIter& begin): cur_iter(begin), next_iter(++begin) {}
operator FwdIter() const { return cur_iter; }
lookahead_iterator<FwdIter>& operator ++() { cur_iter = next_iter++; return *this; }
// Other methods as needed.
private:
FwdIter cur_iter;
FwdIter next_iter;
};
不用说,如果您需要的不仅仅是前向迭代器,这会变得更加复杂。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 一种在C++中读取TXT配置文件的简单方法
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- C++-字符串是否包含一个带有简单循环的单词
- 关于 c++ 函数中指针赋值的简单问题
- 从函数返回任意简单类型的数据
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法