問題タブ [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.
c++ - *イテレータはセグメンテーション違反を引き起こします
私はリストをウォークスルーしようとしています。ここにいくつかの宣言があります:
時々、このコードは2行目でsegfaultsします。
これがセグメンテーション違反につながる可能性がある一般的な理由はありますか?
c++ - 衝突が禁止された unordered_map
unordered_map
いくつかのフェーズで動作する、パフォーマンスが最適化されたバリアントを実装したいと考えています。
- 初期化:約100個の要素を
std::map
- 準備:いくつかの魔法
std::map
をかけて、のバリアントに変換しますstd::unordered_map
- 作業: 大量の (無制限の) ルックアップを実行します。挿入・削除禁止
「作業」フェーズをできるだけ速くするために、指定されたキーのセット (初期化フェーズで収集) に対して衝突のないハッシュ関数を選択したいと思います。
このトリックでどれだけパフォーマンスが向上するかを測定したいと思います。したがって、これは実験であり、製品コードに入る可能性があります。
標準ライブラリには、この実装のためのunordered_map
機能がありますか? または、代わりに独自の実装を作成する必要がありますか?
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)
バージョンは最適化の良い機会を提供するので、それらが削除されるのは奇妙に思えます。そのような最適化されたオーバーロードを提供するために、コンパイラは依然として標準に準拠していますか?
c++ - 標準の名前空間で名前を宣言するのは悪い習慣ですか?
私はGoogleC ++スタイルガイドを調べていましたが、これに出くわしました。
「名前空間stdで何も宣言しないでください。標準ライブラリクラスの前方宣言も含めないでください。名前空間stdでエンティティを宣言することは未定義の動作です。つまり、移植性はありません。標準ライブラリからエンティティを宣言するには、適切なヘッダーファイルを含めます。」
誰かがこれが何を意味するのか、そしてなぜこれが未定義の振る舞いであるのかをサンプルコードを使って説明できますか?
c++ - C ++標準ライブラリの検索の使用法の何が問題になっていますか?
私は次のfind
ようなC++標準ライブラリのアルゴリズムを使用しようとしています。
コンパイルしようとすると、次のエラーが発生します。
「dependent-name'std:: vector :: iterator'は非型として解析されますが、インスタンス化によって型が生成されるように感じます」ビットは、私が間違っていることを理解するための鍵を握っていますが、私のエンドウ豆の脳はできません意味を抽出します。
更新:typename
受け入れられた回答に従って、を追加する必要があり、また、を使用する必要const_iterator
があったため、問題のあるコード行は次のようになりました。
c++ - 「デバッグ アサーションに失敗しました!」の取得 セットコンパレータ用
同様の問題がこのリンクで回答されていることは知っていますが、この C++ std::set コンパレーターを修正する のに役立ちますが、残念ながらまったく同じ問題に直面しており、その背後にある理由を理解できないため、解決するための助けが必要です。
私は VS2010 を使用しており、リリース バイナリは問題なく正常に動作していますが、デバッグ バイナリは次のように報告します。
私のコンパレータは次のようになります。
私のセットは次のように宣言されています:
デバッグ バイナリがこのアサーションで失敗する理由を教えてください。セットに格納されているワイド文字列を比較するために wcscmp() 関数を使用しているためですか?
前もって感謝します!!!
c++ - setw() との取引は何ですか?
私は最近、ストリームにアイテムが書き込まれるたびにios_base::width
および/またはsetw
マニピュレータをリセットする必要があるという事実に悩まされていました。
つまり、これを行う必要があります。
これではなく:
いいよ。
しかし、この設計上の決定がなされた理由を誰か知っていますか? 私が見逃しているという根拠はありますか、それともこれは標準の暗い隅にすぎませんか?
他のストリーム フォーマット修飾子 (リンクされた SO の質問で言及されているように) は「スティッキー」ですが、そうでsetw
はありません。
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
c++ - C++ std::ifstream 読み取りから文字列区切り記号へ
使用時:
文字列に含めることができる文字と、文字列への読み取りを停止する文字。
c++11 - C++0x の使用より安全な長さ型
読ん<ratio>
でいて、偶発的な変換エラーから保護<chrono>
するタイプを想像しようとしました。Length
これは私が得たものです:
このように使用するには
そして今、すべての+
and*
操作を追加して、本当に快適にすることができました... :-)
私は疑問に思う:
- とにかくで定義する算術機能へのより簡単なアクセス
duration
はありますか? それらを使用して労力を軽減できますか?time_point
<chrono>
Length
- コンパイル時の定数は、変換コンストラクター
(Scale2::num*Scale::den)/(Scale2::den*Scale::num)
(分数/アンダーフロー?) で危険に思えますが、より良いメタプログラミングの方法を理解できません。ここに何かヒントはありますか?