Por que não posso usar std :: copy com std :: string para outro std :: string? [duplicado]

Aug 16 2020

O código a seguir imprime uma string vazia e não consigo entender por que é assim.

#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;
}

Respostas

5 songyuanyao Aug 16 2020 at 20:46

O problema é rum vazio std::string, não contém chars. std::copyestá tentando copiar-atribuir chars desde r.begin(), o que leva ao UB.

Você pode fazer rcontendo 5 elementos com antecedência.

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

Ou

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

Ou use std::back_inserter.

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