Почему я не могу использовать 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
, в ней нет char
s. std::copy
пытается скопировать-присваивать char
s с 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));