¿Por qué no se compila `std :: for_each_n`?

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_nme dice que llama

std::for_each(v.begin(), v.begin() + 2, ...)

Pero, al parecer, for_eachdevolviendo un objeto función no es compatible con for_each_ndevolver 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_nun iterador al primer elemento allá del final de la gama que se itera sobre ( v.begin() + 2en este ejemplo).

Estos dos tipos no son compatibles, y tener for_each_ndevolver el resultado de un for_eachbucle no deben compilar.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=370126&siteId=1
Recomendado
Clasificación