使用带有std :: advance的lambda和std :: for_each()

时间:2018-01-07 12:36:06

标签: c++11 lambda foreach

我需要使用std :: for_each()来遍历列表。但是,在for_each()的UnaryFunction部分,我需要使用一个lambda,它实际上通过std :: advance()来推进迭代器。

例如

for_each(beginIter, endIter, lambda);

auto lambda [] = (<Iter parameter>){advance(Iter parameter, 1)};

我期待当lambda返回时,for_each()将从lambda离开的位置继续迭代。

这种理解是否正确?

TIA

维诺德

1 个答案:

答案 0 :(得分:0)

不,它不起作用。

UnaryFunction std::for_each参数将取消引用迭代器作为其参数,而不是迭代器本身。因此,您无法修改lambda中的迭代器。

根据您显示的用法,您应该得到编译器错误,即lambda参数类型与for_each模板的期望不匹配,例如

no known conversion for argument 1 from ‘int’ to ‘std::vector<int>::iterator&’

Live example