Perché non posso usare std :: copy con std :: string in un altro std :: string? [duplicare]

Aug 16 2020

Il codice seguente stampa una stringa vuota e non riesco a capire perché è così?

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

Risposte

5 songyuanyao Aug 16 2020 at 20:46

Il problema è che rè vuoto std::string, non contiene chars. std::copysta cercando di copiare-assegnare chars da allora r.begin(), il che porta a UB.

Puoi fare rcontenente 5 elementi in anticipo.

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

O

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

Oppure usa std::back_inserter.

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