Почему я не могу использовать std :: copy с std :: string для другого std :: string? [дубликат]

Aug 16 2020

Следующий код печатает пустую строку, и я не могу понять, почему это так?

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

Ответы

5 songyuanyao Aug 16 2020 at 20:46

Проблема rпустая std::string, в ней нет chars. std::copyпытается скопировать-присваивать chars с r.begin(), что приводит к UB.

Вы можете сделать rзаранее содержащий 5 элементов.

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

Или же

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

Или используйте std::back_inserter.

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