Pourquoi ne puis-je pas utiliser std :: copy avec std :: string vers un autre std :: string? [dupliquer]

Aug 16 2020

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 Aug 16 2020 at 20:46

Le problème est rqu'un vide std::string, il ne contient pas de chars. std::copyessaie de copier-assigner chardepuis r.begin(), ce qui conduit à UB.

Vous pouvez faire rcontenant 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));