std::stringのプリペンド
2023-09-26 14:01:14
質問
を前置する最も効率的な方法は何でしょうか?
std::string
? そのために関数全体を書き出す価値があるでしょうか、それとも1~2行で済むでしょうか?私は
std::string::push_front
.
どのように解決するのですか?
実は似たような機能で、存在しない
std::string::push_front
と同じような機能があり、以下の例を見てください。
std::string::insert のドキュメンテーション
#include <iostream>
#include <string>
int
main (int argc, char *argv[])
{
std::string s1 (" world");
std::string s2 ("ello");
s1.insert (0, s2); // insert the contents of s2 at offset 0 in s1
s1.insert (0, 1, 'h'); // insert one (1) 'h' at offset 0 in s1
std::cout << s1 << std::endl;
}
を出力します。
hello world
文字列のプリペンドには、データの再割り当てと既存データのコピー/移動の両方が必要な場合があるため、再割り当ての部分を削除するために
std::string::reserve
(を使用することで再割り当ての部分を取り除くことができます(事前に多くのメモリを割り当てるため)。
のように振る舞う独自のカスタムメイドのクラスを定義しない限り、データのコピー/移動は悲しいかな、全く避けられないものです。
std::string
のように動作し、大きなバッファを割り当てて、最初のコンテンツをこのメモリバッファの中央に配置する独自のカスタムクラスを定義しない限り、データのコピー/移動は避けられません。
そうすれば、バッファが十分に大きければ、再割り当てやデータの移動なしに、データの前付けと後付けの両方が可能になります。からのコピー ソース から 宛先 はまだ、明らかに必要ですが。
もし、あなたが以下のようなバッファを持っている場合 前置詞 よりも頻繁にデータを を追加する を使用する場合、文字列を逆向きに保存し、必要なときにそれを反転させるのが良い方法です(それがよりまれである場合)。
関連
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。