Pourquoi ne puis-je pas utiliser std :: copy avec std :: string vers un autre std :: string? [dupliquer]
Le code suivant imprime une chaîne vide et je ne peux pas comprendre pourquoi il en est ainsi?
#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;
}
Réponses
5 songyuanyao
Le problème est r
qu'un vide std::string
, il ne contient pas de char
s. std::copy
essaie de copier-assigner char
depuis r.begin()
, ce qui conduit à UB.
Vous pouvez faire r
contenant 5 éléments à l'avance.
std::string r(5, '\0');
Ou
std::string r;
r.resize(5);
Ou utilisez std::back_inserter
.
std::string r;
std::copy(s.rbegin(),s.rend(), std::back_inserter(r));