2012-05-09 3 views
4

私は巨大な(最大2GBまでの)文字列とそのスライスをC++プログラムで処理しています。このような状況では、Cスタイルの文字列は信頼性が低いようですが、最後に( '\ 0'を付けずに)スライスすることができます。一方、私が理解しているように、std :: string :: substrはスライスをコピーします。したがって、メモリ使用を合理的に保つために、インデックスごとに少なくとも1つの余分な加算演算(インデックス+ベース)を実行する必要があります。オーバーヘッドを少なくして文字列スライスを管理する方法は?

+0

これまでのところ、これは本当の質問ではありません。この他に、イテレータを使ってスライシング(読み込み)することはできませんか? – moooeeeep

+0

私はstd :: stringを効果的にスライスする方法や、それが非現実的であることを確認しています。 – leventov

+0

_unreal_文字列とは何ですか? – RedX

答えて

8

最も一般的な解決策は、必要なインターフェイス を使用してスライスオブジェクトを作成し、それを使用することです。スライスオブジェクトは、2つのイテレータ、開始と終了で構成されます。

+0

スライスに必要なセマンティクスを決めます。スライス内の文字は変更可能ですか?もしそうなら、スライスを修正して完全な文字列を修正することになっていますか?変更可能だが共有されていない場合は、コピーオンライトが必要です。古いCOW実装の 'std :: string'を見つけてそれを(名前を変更して)使用することができない限り、余計な楽しみです。 –

+0

幸いにも、私の文字列は読み取り専用です。 – leventov

関連する問題