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 r
boştur std::string
, hiç char
s içermemektedir . std::copy
o char
zamandan 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));
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'