Visual Studio C++ 2010でbasic_string::append (iter, iter)
が明らかにstd::copy
を使用して実装されていないことがわかりました。basic_string :: append(iter、iter)がstd :: copyを呼び出さないのはなぜですか?
最初の質問:
は、今、私が一緒に、より効率的なブロック単位のコピーを提供するために、私のイテレータ型用std::copy
の最適化されたオーバーロードして、自分のイテレータ型を実装するとします。 basic_string::append
にこのような最適化を利用する方法はありますか?append
のオーバーロードとは別に、
basic_string::append (iter, iter)
が文字単位でコピーしない可能性はありますか?
(私自身の実装のための出発点として)2番目の質問:
は有効であると、次の保証されていますか?
std::string t ("JohnB");
std::string s;
s.reserve (10);
std::copy (t.begin(), t.end(), s.begin());
s.push_back ('\0');
back_inserter
をよく使うべきですか? back_inserter
を使用している場合 - どのように文字のコピーを避けることができますか?
あなたの2番目の質問に答えるには、 'reserve()'に続けて 'copy()'が間違いなく__not valid__です。その理由を調べるには、コピーの後に 's.size()'を表示してください。 – Blastfurnace
@Blastfurnace:しかし、 'resize()'の後に 'copy()'が続きます。 –
'resize'に続いて' copy'はどうでしょうか? – JohnB