curiousguy12:
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v{ 1, 2, 3, 4 };
std::for_each_n(v.begin(), 2, [](int n) { });
}
Con gcc 9.2.1 ( -std=c++17
), esta falla al compilar:
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);
Un vistazo en el interior for_each_n
me dice que llama
std::for_each(v.begin(), v.begin() + 2, ...)
Pero, al parecer, for_each
devolviendo un objeto función no es compatible con for_each_n
devolver un iterador.
¿Cómo utilizo for_each_n
?
1201ProgramAlarm:
Este es un problema con la implementación de la biblioteca.
for_each
devuelve una copia del objeto de función que fue aprobada en.
for_each_n
un iterador al primer elemento allá del final de la gama que se itera sobre ( v.begin() + 2
en este ejemplo).
Estos dos tipos no son compatibles, y tener for_each_n
devolver el resultado de un for_each
bucle no deben compilar.