問題タブ [stdstring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std 文字列の途中で null を設定しても効果がない理由
検討
配列 astd::string
と同じように動作すると思います。char
つまり、文字列の途中にヌル文字を挿入すると、文字列が「終了」します。しかし、そうではありません。私の予想は間違っていますか?
c++ - 生のポインタなしでマップのキーをコピーすることは避けてください
キーがstd::stringであるstd::mapにペアを挿入するたびに、2つのコピーが作成されます。生のポインタの使用を避けることはできますが、例外として安全ではありません。生のポインターの代わりにスマートポインターを使用する方法はありますか?
コード例:
出力:
c++ - 動的に割り当てられたオブジェクトのメンバ パラメータとしての STD::string
オブジェクトのセットを動的に割り当てたい(数百になる可能性があります)。これらのオブジェクトの一部はテキスト フィールドです。std::string は優れた文字列操作を提供するため、std:string型のオブジェクト メンバー パラメータを使用することをお勧めします。
ただし、std::string は動的にサイズ変更可能なオブジェクトです。私にとって、これは std::string を含む動的に割り当てられたオブジェクトに反します: std::string が計画よりも大きくなると、割り当てられたメモリのオーバーフローが発生する可能性があります。
- 動的に割り当てられたオブジェクトのパラメーターとして std::string が適しているかどうか、アドバイスをお願いできますか?
- どのように std::string を操作するので、メモリ オーバーフローが発生しませんか?
- 何百ものオブジェクトが動的に割り当てられる場合でも、std::string はメンバ パラメータとして適していますか?
c++ - 引数のコレクションを使用してstd::stringをフォーマットするにはどうすればよいですか?
std::string
一連の引数を渡してフォーマットすることは可能ですか?
現在、私はこのように文字列をフォーマットしています:
ただし、ベクトルのサイズは実行時に決定されます。sprintf_s
引数のコレクションを取り、std :: string / char *をフォーマットするのと同様の関数はありますか?私の開発環境はMSVisualC ++2010Expressです。
編集: 私は似たようなことを達成したいと思います:
c++ - cout出力をstd::stringに取得する
私は次のcout
ステートメントを持っています。vsnprintf
変数引数リストを変換してに格納するためにに渡す必要があるため、char配列を使用しMsg
ます。
cout
C ++に出力を取得する方法はありますstd::string
か?
c++ - ヌル文字を含むSTLbasic_stringの長さ
std :: basic_stringに「\0」文字を挿入でき、.length()メソッドは影響を受けないのに、呼び出すchar_traits<char>::length(str.c_str())
と最初の「\ 0」文字までの文字列の長さが得られるのはなぜですか?
例えば
c++ - STLキャラクター特性のポイントは何ですか?
SGI STLリファレンスのコピーに、キャラクター特性に関するページがありますが、これらがどのように使用されているかわかりません。それらはstring.h関数を置き換えますか?それらはによって使用されていないようですstd::string
。たとえば、length()
onのメソッドstd::string
はCharacterTraitslength()
メソッドを使用していません。なぜキャラクター特性が存在し、実際に使用されているのですか?
c++ - "" を使用して std::string を初期化する方法は?
""
(つまり、空の文字列)を使用して std::string 変数を初期化する際に問題に直面しています。以前は機能していたコードで奇妙な動作が発生しています。次の記述は間違っていますか?
次のコードを使用すると、すべて正常に動作します。
文字列リテラルは、コンパイラに依存する別のメモリ位置に格納されていると思います。私が見ている問題は、実際にそのストレージの破損を示している可能性がありますか? もしそうなら、それはclear()
関数の私の使い方によって隠されます.
ありがとう。
java - ユーザー入力 大文字と小文字を区別しない
ユーザー入力を読んでいます。equalsIgnoreCase
ユーザー入力にどのように適用するのか疑問に思っていましたか?
c++ - 空きストアメモリが割り当てられていないstd::string
非常によく似た質問があります
glibcの文字列実装を使用してスタックにstd::stringを割り当てるにはどうすればよいですか?
しかし、もう一度尋ねる価値があると思います。
std::string
フリーストアにオーバーフローするローカルストレージを備えたものが必要です。std::basic_string
はテンプレートパラメータとしてアロケータを提供するので、ローカルストレージを使用してアロケータを作成し、それを使用して次のようにパラメータを設定する必要がbasic_string
あるようです。
inline_allocator
期待どおりに機能するクラスを作成しようとしました。ストレージ用に10バイトを予約し、10バイトをbasic_string
超える必要がある場合は、を呼び出します::operator new()
。動作させることができませんでした。上記のコード行を実行する過程で、私のGCC4.5標準文字列ライブラリはコピーコンストラクターをinline_allocator
4回呼び出します。のコピーコンストラクターを作成するための賢明な方法があるかどうかは私にはわかりませんinline_allocator
。
他のStackOverflowスレッドで、EricMelskiはChromiumのクラスへのこのリンクを提供しました。
http://src.chromium.org/svn/trunk/src/base/stack_container.h
これは興味深いですが、のドロップイン置換ではありません。これは、をコンテナstd::string
にラップするstd::basic_string
ため、オーバーロードを呼び出して。operator->()
に到達する必要があるためstd::basic_string
です。
この問題に対する他の解決策は見つかりません。良い解決策がないということでしょうか?そしてそれが本当なら、そしてstd::basic_string
概念はstd::allocator
ひどく欠陥がありますか?std::basic_string
つまり、これはとの非常に基本的で単純なユースケースである必要があるようstd::allocator
です。コンセプトstd::allocator
は主にプール向けに設計されていると思いますが、これもカバーする必要があると思います。
inline_allocator
文字列ライブラリがbasic_string
コピーコンストラクタの代わりにアロケータの移動コンストラクタを使用するように書き直された場合、C++0xの右辺値参照の移動セマンティクスによって書き込みが可能になるようです。誰かがその結果の見通しが何であるか知っていますか?
私のアプリケーションは1秒あたり100万個の小さなASCII文字列を作成する必要があるため、に基づいて独自の固定長文字列クラスを作成するBoost.Array
ことになりました。これは正常に機能しますが、それでも気になります。