c++ - 预测迭代器

标签 c++ c++11 iterator

首先,如果您觉得这个问题不合适,我深表歉意

我偶然发现了一份包含以下详细信息的简历

我几乎总是想做一些足够简单和具体的事情,而不是保证一个全新的功能,但每次都手动进行迭代是困惑和容易出错的,所以我构建了一个谓词迭代器,使我能够保留传统 for 循环的结构:

for (/* loop control */)
{
    /* operation */
}

Specifically, it allows things like:

for (tree_iterator i (root, SomePredicate); i; ++i)
{
    i->SomeOperation();
    i->AnotherOperation();
}

“通过这种方式,迭代机制被分解并保持在一起,循环体专门用于操作。我发现在处理我的对象层次结构时这是一个有用的工具。它允许非常复杂的用抽象的所有适当部分清楚地表示迭代。”

谁能阐明谓词迭代器是什么,或者它的实现方式和工作原理的任何细节?

感谢您抽出时间,如果这是一个错误的问题,我们深表歉意。

最佳答案

A filter_iterator是一个迭代器,它将迭代器包装在项目上,并跳过不需要的项目。

std::vector<ShoppingItem> list = ...
auto veggies = make_filter_iterator(isVegitable, list.begin(), list.end());

while(veggies != veggies.end()) {
    buy(*veggies);
}

关键部分很简单,当您推进 filter_iterator 时,它会推进内部迭代器,并检查是否应保留下一项。如果没有,它会继续推进内部迭代器,直到到达末尾,或者找到要保留的项目。

这个在实践中其实很少用到,因为filtered ranges几乎总是更好。

关于c++ - 预测迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39669151/

相关文章:

c++ - 堆栈弹出操作能否在 C++11 中安全地返回值

python - 如何在循环中获取当前迭代器项的索引?

c++ - std::find_if ——我该如何对此执行 C# FirstOrDefault ?

c++ - 为什么存在这些替代运算符表示

php - HipHop PHP 将其转换为 C++ 后,关联数组是什么样子的?

c++ - 如何使用 Poco::Net::HTTPSClientSession 绑定(bind)特定源 IP 地址

c++ - 模板非类型参数+左值/右值

c++ - std::iter_swap 需要 ValueSwappable args vs std::swap 需要 Move Assignable args

c++ - 具有左值和右值的可变参数模板类构造函数

OpenCV:矩阵迭代