Neden std :: copy ile std :: string'i başka bir std :: string'e kullanamıyorum? [çiftleme]

Aug 16 2020

Aşağıdaki kod boş bir dize yazdırıyor ve neden böyle olduğunu anlayamıyorum?

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

Yanıtlar

5 songyuanyao Aug 16 2020 at 20:46

Sorun rboştur std::string, hiç chars içermemektedir . std::copyo charzamandan beri kopyalamaya-atamaya çalışıyor r.begin(), bu da UB'ye yol açıyor.

rÖnceden 5 element içeren yapabilirsiniz .

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

Veya

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

Veya kullanın std::back_inserter.

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