¿Por qué no puedo usar std :: copy con std :: string a otro std :: string? [duplicar]

Aug 16 2020

El siguiente código imprime una cadena vacía y no puedo entender por qué es así.

#include <string>
#include <algorithm>
#include <iostream>

int main()
{
    std::string s="hello";
    std::string r;
    std::copy(s.rbegin(),s.rend(), r.begin());
    std::cout<<r;
    return 0;
}

Respuestas

5 songyuanyao Aug 16 2020 at 20:46

El problema es que restá vacío std::string, no contiene chars. std::copyestá tratando de copiar-asignar chars desde r.begin(), lo que conduce a UB.

Puedes hacer que rcontenga 5 elementos por adelantado.

std::string r(5, '\0');

O

std::string r;
r.resize(5);

O utilizar std::back_inserter.

std::string r;
std::copy(s.rbegin(),s.rend(), std::back_inserter(r));