問題タブ [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 投票する
2 に答える
1141 参照

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

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

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

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

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

c++ - 衝突が禁止された unordered_map

unordered_mapいくつかのフェーズで動作する、パフォーマンスが最適化されたバリアントを実装したいと考えています。

  1. 初期化:約100個の要素をstd::map
  2. 準備:いくつかの魔法std::mapをかけて、のバリアントに変換しますstd::unordered_map
  3. 作業: 大量の (無制限の) ルックアップを実行します。挿入・削除禁止

「作業」フェーズをできるだけ速くするために、指定されたキーのセット (初期化フェーズで収集) に対して衝突のないハッシュ関数を選択したいと思います。

このトリックでどれだけパフォーマンスが向上するかを測定したいと思います。したがって、これは実験であり、製品コードに入る可能性があります。

標準ライブラリには、この実装のためのunordered_map機能がありますか? または、代わりに独自の実装を作成する必要がありますか?

0 投票する
1 に答える
12983 参照

c++ - std::pow(double, int) が C++11 から削除されたのはなぜですか?

p^q (累乗) を計算する効率的な方法 (q は整数) を調べ、C++98 および C++11 標準を確認しているときに、明らかstd::pow(double, int)に C++11 でオーバーロードが削除されていることに気付きました。

C++98 26.5/6 では、double pow(double, int);署名があります。

C++11 26.8 で見つけたのはfloat、 、double、またはのペアを取るオーバーロードlong doubleと、整数と倍精度のパラメーター型が混在している場合は、pow(double, double)オーバーロードを選択する必要があるという明示的なメモだけでした。

これは以前の意図を明確にしただけですか? C++98 で誤って追加されたのでしょうか? C++11 で実際に削除されたのでしょうか?

明らかに、このpow(double, int)バージョンは最適化の良い機会を提供するので、それらが削除されるのは奇妙に思えます。そのような最適化されたオーバーロードを提供するために、コンパイラは依然として標準に準拠していますか?

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

c++ - 標準の名前空間で名前を宣言するのは悪い習慣ですか?

私はGoogleC ++スタイルガイドを調べていましたが、これに出くわしました。

「名前空間stdで何も宣言しないでください。標準ライブラリクラスの前方宣言も含めないでください。名前空間stdでエンティティを宣言することは未定義の動作です。つまり、移植性はありません。標準ライブラリからエンティティを宣言するには、適切なヘッダーファイルを含めます。」

誰かがこれが何を意味するのか、そしてなぜこれが未定義の振る舞いであるのかをサンプルコードを使って説明できますか?

0 投票する
1 に答える
16281 参照

c++ - C ++標準ライブラリの検索の使用法の何が問題になっていますか?

私は次のfindようなC++標準ライブラリのアルゴリズムを使用しようとしています。

コンパイルしようとすると、次のエラーが発生します。

「dependent-name'std:: vector :: iterator'は非型として解析されますが、インスタンス化によって型が生成されるように感じます」ビットは、私が間違っていることを理解するための鍵を握っていますが、私のエンドウ豆の脳はできません意味を抽出します。

更新:typename受け入れられた回答に従って、を追加する必要があり、また、を使用する必要const_iteratorがあったため、問題のあるコード行は次のようになりました。

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

c++ - 「デバッグ アサーションに失敗しました!」の取得 セットコンパレータ用

同様の問題がこのリンクで回答されていることは知っていますが、この C++ std::set コンパレーターを修正する のに役立ちますが、残念ながらまったく同じ問題に直面しており、その背後にある理由を理解できないため、解決するための助けが必要です。

私は VS2010 を使用しており、リリース バイナリは問題なく正常に動作していますが、デバッグ バイナリは次のように報告します。

ここに画像の説明を入力

私のコンパレータは次のようになります。

私のセットは次のように宣言されています:

デバッグ バイナリがこのアサーションで失敗する理由を教えてください。セットに格納されているワイド文字列を比較するために wcscmp() 関数を使用しているためですか?

前もって感謝します!!!

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

c++ - setw() との取引は何ですか?

私は最近、ストリームにアイテムが書き込まれるたびにios_base::widthおよび/またはsetwマニピュレータをリセットする必要があるという事実に悩まされていました。

つまり、これを行う必要があります。

これではなく:

いいよ。

しかし、この設計上の決定がなされた理由を誰か知っていますか? 私が見逃しているという根拠はありますか、それともこれは標準の暗い隅にすぎませんか?

他のストリーム フォーマット修飾子 (リンクされた SO の質問で言及されているように) は「スティッキー」ですが、そうでsetwはありません。

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

c++ - ベクトルでリンカーエラーが発生するのはなぜですか?

私は宿題のために自分の抽象クラスVectorを書く必要があります。コードの一部を作成しましたが、コンパイルしようとするとエラーが発生します。これはコードです:

vector.hh

vector.cc

main.cc

そしてエラーは次のとおりです。

g ++ -c -o main.o main.cc
g ++ -Wall -g vector.o main.o -o hw02vector
main.o:関数内'main': main.cc:(。text+ 0x37
):collect2への未定義の参照'Vector<int>::push_back(int const&)'
:ldが返されました1終了ステータス
make:* [hw02vector]エラー1

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

c++ - C++ std::ifstream 読み取りから文字列区切り記号へ

使用時:

文字列に含めることができる文字と、文字列への読み取りを停止する文字。

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

c++11 - C++0x の使用より安全な長さ型

読ん<ratio>でいて、偶発的な変換エラーから保護<chrono>するタイプを想像しようとしました。Length

これは私が得たものです:

このように使用するには

そして今、すべての+and*操作を追加して、本当に快適にすることができました... :-)

私は疑問に思う:

  • とにかくで定義する算術機能へのより簡単なアクセスdurationはありますか? それらを使用して労力を軽減できますか?time_point<chrono>Length
  • コンパイル時の定数は、変換コンストラクター(Scale2::num*Scale::den)/(Scale2::den*Scale::num)(分数/アンダーフロー?) で危険に思えますが、より良いメタプログラミングの方法を理解できません。ここに何かヒントはありますか?