预测迭代器

时间:2016-09-23 20:37:49

标签: 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();
}

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

有人可以对预测迭代器的内容或任何有关它如何实现以及它如何工作的细节有所了解吗?

感谢您的时间,如果这是一个错误的问题,请道歉。

2 个答案:

答案 0 :(得分:2)

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几乎总是更好。

答案 1 :(得分:1)

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

可以被认为是:

for ( regular_iterator i(root); i; ++i)
{
    if ( SomePredicate(*i) )
    {
       i->SomeOperation();
       i->AnotherOperation();
    }
}