【问题标题】:How to get current iterator in lambda operation如何在 lambda 操作中获取当前迭代器
【发布时间】:2015-11-17 22:45:13
【问题描述】:

我该如何解决以下情况,对于任何可以使用 for_each 函数的容器类型 -> 对于向量,这很容易,因为我可以在调用之外添加一个变量并将其作为参考参数并递增它在 lambda 函数中。那么如何在 lambda 函数中获取当前的迭代器呢?

std::for_each(container.begin(), container.end(), []() {
            //do-something and get the current iterator
});

【问题讨论】:

标签: c++ algorithm foreach lambda iterator


【解决方案1】:

只是不要调用std::for_each(),而是使用循环:

auto lambda = []( auto iter ) {}
for( auto it = container.begin(); it != container.end(); ++it ) lambda( it );

如果您愿意,可以围绕它编写一个算法:

template< class InputIt, class UnaryFunction >
UnaryFunction for_each_iter( InputIt first, InputIt last, UnaryFunction f )
{
    while( first != last ) f(first++);
    return f;
}

【讨论】:

  • UnaryFunction 不能是void,否则它不能被调用,因此你需要一个return。此外,即使迭代器应该可以廉价地复制,也没有理由依赖它。
【解决方案2】:

您可以编写自己的函数:

template<class InputIt, class UnaryFunction>
UnaryFunction for_each_it(InputIt first, InputIt last, UnaryFunction f) {
    for (; first != last; ++first) (void) f(first);
    return f;
}

【讨论】:

    猜你喜欢
    • 2022-11-20
    • 1970-01-01
    • 2011-02-16
    • 2018-06-01
    • 2021-05-09
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    相关资源
    最近更新 更多