私は巨大な(最大2GBまでの)文字列とそのスライスをC++プログラムで処理しています。このような状況では、Cスタイルの文字列は信頼性が低いようですが、最後に( '\ 0'を付けずに)スライスすることができます。一方、私が理解しているように、std :: string :: substrはスライスをコピーします。したがって、メモリ使用を合理的に保つために、インデックスごとに少なくとも1つの余分な加算演算(インデックス+ベース)を実行する必要があります。オーバーヘッドを少なくして文字列スライスを管理する方法は?
4
A
答えて
8
最も一般的な解決策は、必要なインターフェイス を使用してスライスオブジェクトを作成し、それを使用することです。スライスオブジェクトは、2つのイテレータ、開始と終了で構成されます。
+0
スライスに必要なセマンティクスを決めます。スライス内の文字は変更可能ですか?もしそうなら、スライスを修正して完全な文字列を修正することになっていますか?変更可能だが共有されていない場合は、コピーオンライトが必要です。古いCOW実装の 'std :: string'を見つけてそれを(名前を変更して)使用することができない限り、余計な楽しみです。 –
+0
幸いにも、私の文字列は読み取り専用です。 – leventov
関連する問題
- 1. 大きな文字列を管理する方法
- 2. 列挙型オーバーヘッドなしの文字列リテラル型を取得する方法
- 3. 構造体のスライスを文字列のスライスに変換する方法は?
- 4. i18n文字列を管理するツール
- 5. 文字列を文字列にスライス
- 6. 文字列スライスをルーンスライスに変換する方法
- 7. GraphicsPath.AddStringで文字間隔を管理する方法は?
- 8. 文字列の文字を反復処理する方法は?
- 9. Python文字列スライス
- 10. ソナタ管理者は、ソナタ管理ツールで、クエリ文字列
- 11. 文字列をスライスしてスプライスされた文字列を返す
- 12. cgo **文字列をスライスする
- 13. DropDownListで接続文字列を管理
- 14. CoffeeScript:文字列をスライスして最後の2文字だけを取得する方法
- 15. ユニークな値のCSV文字列を管理する
- 16. 文字列をスライスしてIDを作成する
- 17. 文字 "in"文字列を検索してpandasデータフレームをスライスする
- 18. disjunction文(論理 "or")でpandas DataFrameをスライスする方法は?
- 19. Unix:ファイルのみを管理する方法!名前の$文字
- 20. 最新の方法でWinAPIプロジェクトの文字列リソースを管理する
- 21. Cで文字列をスライスする方法はありますか?
- 22. Javascriptでスライスして文字列を変更する
- 23. Cで文字列をスライスしてコピーする
- 24. 動的文字列のJavascriptスライス文字
- 25. Rubyで文字列スライスを行う方法
- 26. パンダの列の文字列をスライス
- 27. 文字列入力を「なし」として処理する方法Nonetype
- 28. format()で文字列引数のスライスを取る方法はありますか?
- 29. 日付からx文字をスライスする方法は?
- 30. 文字配列内の文字を重複なく印刷する方法は?
これまでのところ、これは本当の質問ではありません。この他に、イテレータを使ってスライシング(読み込み)することはできませんか? – moooeeeep
私はstd :: stringを効果的にスライスする方法や、それが非現実的であることを確認しています。 – leventov
_unreal_文字列とは何ですか? – RedX