#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v{ 1, 2, 3, 4 };
std::for_each_n(v.begin(), 2, [](int n) { });
}
С g cc 9.2.1 (-std=c++17
) это не скомпилируется:
error: could not convert 'std::for_each<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, main()::<lambda(int)> >(__first, __first.__gnu_cxx::__normal_iterator<int*, std::vector<int> >::operator+(__n2), (__f, main()::<lambda(int)>()))' from 'main()::<lambda(int)>' to '__gnu_cxx::__normal_iterator<int*, std::vector<int> >'
3900 | return std::for_each(__first, __first + __n2, __f);
Взгляд внутрь for_each_n
говорит мне, что он вызывает
std::for_each(v.begin(), v.begin() + 2, ...)
Но, очевидно, for_each
, возвращающий функциональный объект, несовместим с for_each_n
, возвращающим итератор.
Как мне использовать for_each_n
?