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 char
s. std::copy
sta cercando di copiare-assegnare char
s da allora r.begin()
, il che porta a UB.
Puoi fare r
contenente 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));