เหตุใดฉันจึงใช้ 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
ตั้งแต่นั้นเป็นต้นมา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));