問題タブ [c++-standard-library]

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.

0 投票する
12 に答える
153833 参照

c++ - このコードで string::npos はどういう意味ですか?

std::string::npos次のコード スニペットのフレーズは何を意味していますか?

0 投票する
4 に答える
3083 参照

c++ - std::istream::read の設計を理解する

std::istreamにはプロトタイプistream& read (char* s, streamsize n)があり、実際に読み取られるバイト数は を呼び出して取得する必要がistream::gcount()あり、 の有効性もistreamから知ることができますios::good

私が書こうとしていた別のストリームクラスの実装について同僚と話し合っていたとき、私はこの設計に従うかもしれないと言っていました。しかし、ユーザーに毎回gcountを呼び出させる代わりに、このようにプロトタイプを読み取って、1 回の呼び出しで解決できるようにすることもできistream& read (char* s, streamsize n, size_t &bytes_read)、前者は扱いにくいと彼は言いました。std私はのデザイン選択を弁護できませんでした。背後にある本当の理由は何istream::readですか?

0 投票する
4 に答える
14441 参照

c++ - これはC++の「move」セマンティクスの正しい使用法ですか?

今夜、私は過去数日間に取り組んできたいくつかのコードを調べ、moveセマンティクス、特にstd::moveについて読み始めました。私が正しい道を進んでいて、愚かな仮定をしないことを確実にするためにあなたにプロに尋ねるいくつかの質問があります!

まず:

1)元々、私のコードには大きなベクトルを返す関数がありました。

「theVector」がこれと「throw-away」で一時的であるとすると、関数を次のように変更しました。

これは正しいです?このようにすることの落とし穴はありますか?

std::string2)ある関数で、moveコンストラクターが自動的に呼び出されることを返すことに気づきました。文字列の戻り値(ありがとう、アラゴルン)にデバッグすると、明示的な移動コンストラクターと呼ばれることに気づきました。ベクトルではなく文字列クラス用のものがあるのはなぜですか?

移動セマンティクスを利用するために、この関数に変更を加える必要はありませんでした。

3)最後に、いくつかのパフォーマンステストを実行したかったのですが、std :: moveセマンティクスが原因で得られた驚くほど高速な結果ですか、それともコンパイラ(VS2010)も最適化を実行しましたか?

_getMilliseconds()(簡潔にするために省略の実装)

結果は明らかに素晴らしいものでした。result1は、標準の割り当てで、630ミリ秒かかりました。2番目の結果は0msでした。これはこれらのことの良いパフォーマンステストですか?

これのいくつかは多くの人にとって明らかなことですが、コードをブレザーする直前にセマンティクスを理解していることを確認したいと思います。

前もって感謝します!

0 投票する
3 に答える
1612 参照

c++ - c ++ toupper-標準関数?

重複の可能性:
C++の文字列を大文字に変換する

こんにちは、C++の文字列を大文字に変換するためのポータブル関数が必要です。私は今toupper(char);を使用しています。働き。標準機能ですか?そうでない場合、プラットフォーム間でそれを行う正しい方法は何ですか?ところで、すべてのc++標準関数を一覧表示できるWeb/Wikiはありますか?ありがとうございました。

0 投票する
5 に答える
2943 参照

c++ - Python標準ライブラリに相当するC/C ++

ボイラープレートをスキップしてGetThingsDoneを実行するために、有用なデータ構造とマニピュレーター(たとえば、、)とユーティリティ(たとえば、、、)の両方について、Pythonの標準ライブラリ大きく依存しています。C ++標準ライブラリのドキュメントを見ると、Pythonの標準ライブラリに含まれる「バッテリー」の邪魔になるものはほとんどなく、完全にデータ構造に関するもののようです。collectionsitertoolsoptparsejsonlogging

Boostライブラリは、Python標準ライブラリに似ていることを私が知っている唯一のオープンソースC ++ライブラリコレクションですが、正規表現サポートなどのユーティリティライブラリはありますが、そのほとんどはデータ構造専用です。Pythoncsvモジュールを使用して楽しくシンプルに作成されたCSVファイルの確実な解析と書き込みのような単純なものでさえ、C ++で独自にローリングする必要があるように見えることに本当に驚いています(Boostによる解析ライブラリを利用している場合でも)。

「バッテリー」を提供するC++用の他のオープンソースライブラリはありますか?そうでない場合は、C ++プログラマーとして何をしますか:個々のユーティリティライブラリを探しますか(もしそうなら、どのように)、または単に自分でロールします(これは面倒で無駄に思えます)?

0 投票する
2 に答える
27048 参照

c++ - std::アトミック | compare_exchange_weak と compare_exchange_strong の比較

私が理解していないのか、ドキュメントが明確に定式化されていないのかはわかりません。

次の抜粋は、最新のドラフト (N3126、セクション 29.6) からの抜粋です。

注意: 弱い比較交換操作は誤って失敗する可能性があります。つまり、操作がオブジェクトの内容と同じであり、操作後の期待値と同じである前に、expected が指すメモリの内容を残したまま、false を返す場合があります。操作。[ 注: この誤った失敗により、より広いクラスのマシン (ロードロックされたストア条件付きマシンなど) での比較交換の実装が可能になります。偽の失敗の結果として、弱い比較交換のほぼすべての使用がループ状態になります。

それで、これはどういう意味ですか?

まず、誤って失敗する可能性がありますか?! なぜ失敗するのでしょうか?そして、彼らは「かもしれない」をどのように定義しますか?

第二に、「_strong」サフィックスと「_weak」サフィックスを持つ関数の違いは何なのか、まだわかりません。誰かが違いを説明できますか?

編集: それは私が libstdc++ 実装 (atomic_0.h) で見つけたものです:

0 投票する
3 に答える
30288 参照

c++ - IOStream のパフォーマンスを向上させるにはどうすればよいですか?

C を学んだほとんどの C++ ユーザーは、C++ でコーディングしている場合でも、関数のprintf/scanfファミリを使用することを好みます。

インターフェイスの方がはるかに優れていることは認めますが (特に POSIX に似た形式とローカリゼーション)、圧倒的な懸念事項はパフォーマンスであるようです。

この質問を見てみましょう:

ファイルの行ごとの読み取りを高速化するにはどうすればよいですか

最良の答えは使用することfscanfであり、C++ifstreamは一貫して 2 ~ 3 倍遅いようです。

IOStreams のパフォーマンスを改善するための「ヒント」のリポジトリをコンパイルできれば、何が機能し、何が機能しないかを考えることができれば素晴らしいと思いました。

考慮すべき点

  • バッファリング ( rdbuf()->pubsetbuf(buffer, size))
  • 同期 ( std::ios_base::sync_with_stdio)
  • ロケール処理 (縮小されたロケールを使用するか、それとも完全に削除できますか?)

もちろん、他のアプローチも大歓迎です。

注: Dietmar Kuhl による「新しい」実装が言及されましたが、それに関する多くの詳細を見つけることができませんでした。以前の参照はリンク切れのようです。

0 投票する
3 に答える
28011 参照

c++ - デフォルトのコンストラクターを使用してstd::vectorを初期化する

std::vectorであるクラスフィールドがあります。このベクトルに含める要素の数を知っています:N。N個の要素でベクトルを初期化するにはどうすればよいですか?

0 投票する
2 に答える
17761 参照

c++ - 標準 C++ ライブラリがすべて小文字を使用するのはなぜですか?

camelCaseC++ 標準ライブラリが命名規則または命名規則の代わりにすべて小文字とアンダースコアを使用する理由を知りたいPascalCaseです。

個人的には、コードを入力するときに後者の方がはるかに扱いやすいと思いますが、前者を使用する何らかの正当な理由はありますか?

0 投票する
2 に答える
1141 参照

c++ - *イテレータはセグメンテーション違反を引き起こします

私はリストをウォークスルーしようとしています。ここにいくつかの宣言があります:

時々、このコードは2行目でsegfaultsします。

これがセグメンテーション違反につながる可能性がある一般的な理由はありますか?