เหตุใดฉันจึงใช้ 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พยายามคัดลอกกำหนด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));