¿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 r
está vacío std::string
, no contiene char
s. std::copy
está tratando de copiar-asignar char
s desde r.begin()
, lo que conduce a UB.
Puedes hacer que r
contenga 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));