問題タブ [ostringstream]
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++ - ostringstream からの文字列のコピーを避ける
インターフェイスを介してデータを入力し、文字列のコピーを避けstd::string
たいという名前があります。
コピーを含むそれを行う1つの方法は、これを行うことです:std::ostream
結果を渡す必要があり、返すout
ことができません。この文字列は非常に大きい 可能性がある
ため、コピーを避けたいと思います。 ostr.str()
out = ostr.str();
おそらくsを使用して、バッファを直接rdbuf()
バインドする方法はありますか?std::ostream
out
明確にするために、呼び出し元が呼び出し前にサイズを知る必要がないように、andの自動拡張動作に興味があります。std::string
std::ostream
更新out = ostr.str();
:無害な行にはおそらく2つのコピーが必要であることに気付きました:
str()
通話による最初の- もう 1 つは
std::string
代入演算子によるものです。
c++ - std::unique_ptr および std::ostringstream での奇妙な動作 (SIGSEGV)
現在、std::ostringstream を std::unique_ptr にラップしようとしています。現在のコードはコンパイルされますが、実行時にセグメンテーション エラーが発生します。
古いCスタイルのポインターを使用してラップしないと、正常に動作します。
より詳細な概要については、curlpp を使用して ostringstream にデータをダウンロードしています。
これは私がやっていることです:
セグメンテーション違反は最後の行で発生します。これはバックトレースです。
参考までに、私のファイルは #14 から #12 までです。上記のコードはファイル #12 の一部です。
さて、これは奇妙です。次のコードを書いているとき、問題なく動作します:
どちらの場合も operator<< へのポインターを渡していますが、私は間違っているようです。
どこが間違っていますか?
ご協力いただきありがとうございます :)
注: シンクとソースのパターンを実装するために unique_ptr を使用したかったのです。
c++ - 再帰可変関数を持つ文字列ストリーム?
ostringstream を使用して、複数の異なる引数を 1 つの文字列に結合できるようにしたいと考えています。そうすれば、結果の単一の文字列をランダムな問題なしでログに記録できます。
私はこれまでに得ました:
したがって、std::cout を LogAll 関数で作成した oss に置き換える必要があります。それを引数として他の関数に渡そうとしましたが、「削除された関数」について不平を言っていました...
では、どうすれば再帰的な可変引数関数を取得して、別のパラメーターである ostringstream を受け入れることができるでしょうか?
c++ - 任意の長さの文字列に対する C++ の文字列置換
から取得した文字列がありますostringstream
。現在、この文字列 ( ) の一部の文字を置き換えようとしていますcontent.replace(content.begin(), content.end(), "\n", "");
が、例外が発生することがあります。
文字列が大きすぎるためにこれが発生すると思われます。これらの状況のベストプラクティスは何ですか? ヒープ上で文字列を宣言しますか?
アップデート
私の完全な方法:
c++ - 文字列を std::ostringstream から移動します
を使用して、スペースで区切られた浮動小数点値のリストで構成される文字列を作成するとstd::ostringstream
:
次に、結果を次のように取得しますstd::string
。
ただし、これにより、文字列コンテンツの不要なディープ コピーが作成され、ss
使用されなくなります。
コンテンツ全体をコピーせずに文字列を作成する方法はありますか?
c++ - std::ostringstream から別の std::ostringstream にリダイレクトします
std::ostringstream
一部から別のデータを書き込む必要がありますstd::ostringstream
。もちろんstr()
機能も使えます
同じことを行うより直接的な方法があるかどうか知りたいです。