文字列sの先頭にcharcを追加したい場合、次の良い習慣はありますか?
string s = "oo";
char c = 'f';
s = c + s;
SOの質問「Prependstd :: string」では、これを行うことを提案した回答は、member-functionの使用を提案したトップの回答よりも評判が良くありません.insert()
でした。
効率以外に理由はありますか(s = c + s
すべての内容をstring s
コピーする必要があるため効率的ではありません)?
どちらも同じ操作を行うので、効率以外にどのような理由があるのでしょうか。c+s
したがって、両方のすべての文字のコピーが必要な、一時的な文字列を作成するc
とs
、および潜在的にヒープ割り当てを。次に、一時オブジェクトは指定されたオブジェクトに移動され、現在のメモリの割り当てが解除されます(存在する場合)。これらは安価な操作ではありません。
これとは対照的に、insert
なりますだけ新しい文字のための十分な容量がある場合は、ヒープの割り当てを行います。最初に挿入しているので、コピーは引き続き実行されます。しかし、それはそれについてです。隣接する配列の先頭に挿入するのと同じくらい効率的です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加