タグ付けされた質問 「c++」

C ++は汎用プログラミング言語です。もともとCの拡張として設計され、構文は似ていますが、現在は完全に異なる言語になっています。このタグは、C ++コンパイラでコンパイルされる(される)コードに関する質問に使用します。特定の標準リビジョン[C ++ 11]、[C ++ 14]、[C ++ 17]または[C ++ 20]などに関連する質問には、バージョン固有のタグを使用します。

14
C / C#/ C ++で逆方向ループを実行する最良の方法は何ですか?
配列を逆方向に移動する必要があるため、次のようなコードがあります。 for (int i = myArray.Length - 1; i >= 0; i--) { // Do something myArray[i] = 42; } これを行うより良い方法はありますか? 更新:多分C#に次のような組み込みメカニズムがあるといいのですが。 foreachbackwards (int i in myArray) { // so easy } アップデート2:存在しているより良い方法は。ルーンは賞品を受け取ります: for (int i = myArray.Length; i-- > 0; ) { //do something } //or for (int i …
101 c#  c++  c 

6
caseステートメントで{}を使用します。どうして?
使用してのポイントは何である{と}におけるcase文は?通常、caseステートメントの行数に関係なく、すべての行が実行されます。これは古い/新しいコンパイラに関するルールですか、それとも背後に何かありますか? int a = 0; switch (a) { case 0:{ std::cout << "line1\n"; std::cout << "line2\n"; break; } } そして int a = 0; switch (a) { case 0: std::cout << "line1\n"; std::cout << "line2\n"; break; }

13
C ++で自律型の `self`メンバー型を実装できますか?
C ++には、囲んでいるクラスのタイプに評価されるPHPのselfキーワードに相当するものがありません。 クラスごとにそれを偽造するのは十分簡単です: struct Foo { typedef Foo self; }; しかし、私はFoo再び書く必要がありました。多分私はいつかこれを間違えてサイレントバグを引き起こすでしょう。 とのいくつかの組み合わせを使用decltypeして、この作業を「自律的に」行うことはできますか?私はすでに以下を試しましたがthis、その場所では無効です: struct Foo { typedef decltype(*this) self; }; // main.cpp:3:22: error: invalid use of 'this' at top level // typedef decltype(*this) self; (私はと同等ですstaticが、同じことを行いますが、遅延バインディングについては心配しません。)
101 c++  c++11 

7
加重乱数
加重乱数を実装しようとしています。私は現在、壁に頭をぶつけているだけで、これを理解することはできません。 私のプロジェクト(ホールデムハンドレンジ、主観的なオールインエクイティ分析)では、Boostのランダム関数を使用しています。それで、1と3の間の乱数(つまり、1、2、または3)を選びたいとしましょう。Boostのメルセンヌツイスタージェネレーターは、これの魅力のように機能します。ただし、たとえば次のようにピックに重みを付けたいです。 1 (weight: 90) 2 (weight: 56) 3 (weight: 4) Boostにはこのための機能がありますか?
101 c++  boost  random 

3
順序付けされていないコンテナでユーザー定義型のstd :: hash <Key> :: operator()を特化する方法は?
で、ユーザー定義のキータイプをサポートするために、std::unordered_set&lt;Key&gt;そしてstd::unordered_map&lt;Key, Value&gt; 一つが提供しなければならないoperator==(Key, Key)とハッシュファンクタ: struct X { int id; /* ... */ }; bool operator==(X a, X b) { return a.id == b.id; } struct MyHash { size_t operator()(const X&amp; x) const { return std::hash&lt;int&gt;()(x.id); } }; std::unordered_set&lt;X, MyHash&gt; s; コンパイラとライブラリに付属する型の場合のように、typeのデフォルトのハッシュだけstd::unordered_set&lt;X&gt; で記述する方が便利ですX。相談後 C ++標準ドラフトN3242§20.8.12 [unord.hash]および§17.6.3.4[hash.requirements]、 Boost.Unordered g ++ include\c++\4.7.0\bits\functional_hash.h VC10 …

5
ベクトルから要素を消去する
消去メソッドを使用してベクトルから要素をクリアしたいのですが。しかし、ここでの問題は、要素がベクトル内で1回だけ発生することが保証されていないことです。それは複数回存在する可能性があり、それらをすべてクリアする必要があります。私のコードは次のようなものです: void erase(std::vector&lt;int&gt;&amp; myNumbers_in, int number_in) { std::vector&lt;int&gt;::iterator iter = myNumbers_in.begin(); std::vector&lt;int&gt;::iterator endIter = myNumbers_in.end(); for(; iter != endIter; ++iter) { if(*iter == number_in) { myNumbers_in.erase(iter); } } } int main(int argc, char* argv[]) { std::vector&lt;int&gt; myNmbers; for(int i = 0; i &lt; 2; ++i) { myNmbers.push_back(i); myNmbers.push_back(i); } erase(myNmbers, …
101 c++  vector  stl  erase 

3
g ++で静的ライブラリを作成する方法は?
誰かが.cppと.hppファイルから静的ライブラリを作成する方法を教えてもらえますか?.oと.aを作成する必要がありますか?また、静的ライブラリをコンパイルして他の.cppコードで使用する方法を教えてください。持っていますheader.cpp、header.hpp .作りたいheader.aです。でheader.aをテストしtest.cppます。コンパイルにg ++を使用しています。

2
これのstd :: shared_ptr
私は現在、スマートポインターの使用方法を学習しようとしています。しかし、いくつかの実験を行っているときに、満足のいく解決策を見つけることができない次の状況を発見しました。 クラスAのオブジェクトがクラスB(子)のオブジェクトの親であるとしますが、両方がお互いを知っている必要があります。 class A; class B; class A { public: void addChild(std::shared_ptr&lt;B&gt; child) { children-&gt;push_back(child); // How to do pass the pointer correctly? // child-&gt;setParent(this); // wrong // ^^^^ } private: std::list&lt;std::shared_ptr&lt;B&gt;&gt; children; }; class B { public: setParent(std::shared_ptr&lt;A&gt; parent) { this-&gt;parent = parent; }; private: std::shared_ptr&lt;A&gt; parent; }; 問題は、クラスAのオブジェクトstd::shared_ptrがそれ自体の(this)をその子にどのように渡すことができるかです。 …


2
コンパイラエラー:memsetはこのスコープで宣言されていません
Ubuntu 9.10(gcc 4.4.1)でCプログラムをコンパイルしようとしています。 このエラーが発生しています: Rect.cpp:344: error: ‘memset’ was not declared in this scope しかし、問題はすでにcppファイルに含まれていることです。 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; また、同じプログラムはUbuntu 8.04(gcc 4.2.4)で正常にコンパイルされます。 何が足りないのか教えてください。
100 c++  gcc 

8
「else if」は単一のキーワードですか?
C ++は初めてです。以下のような条件文がよく見られます。 if statement_0; else if statement_1; 質問: 構文的にはelse if、単一のキーワードとして扱うべきですか?それとも実際には以下のようにif外側の入れ子になったステートメントelseですか? if statement_0; else if statement_1;

19
sinとcosを一緒に計算する最も速い方法は何ですか?
値の正弦と余弦の両方を一緒に計算したい(たとえば、回転行列を作成したい)。もちろん、のように次々に別々に計算することもできますa = cos(x); b = sin(x);が、両方の値が必要な場合により速い方法があるかどうか疑問に思います。 編集: これまでの答えを要約するには: Vladは、FSINCOS両方を計算するasmコマンドがある(FSIN一人での呼び出しとほぼ同時に)と述べた Chiが気づいたように、この最適化はコンパイラーによって既に行われていることがあります(最適化フラグを使用する場合)。 カフェは機能していること、を指摘sincosしてはsincosf、おそらく利用可能であり、ちょうど含めることによって直接呼び出すことができますmath.h ルックアップテーブルを使用する tanasciusのアプローチについては、議論の余地があります。(ただし、私のコンピューターとベンチマークシナリオではsincos、32ビット浮動小数点の場合とほぼ同じ精度の場合よりも3倍速く実行されます。) Joel Goodwinは、非常に優れた精度の非常に高速な近似手法の興味深いアプローチにリンクしています(私にとって、これはテーブルルックアップよりもさらに高速です)
100 c#  c++  c  algorithm  math 

11
最新のハードウェアでの浮動小数点と整数の計算
私はC ++でパフォーマンスが重要な作業を行っており、現在「本質的に浮動小数点」である問題のために「より速い」ため、整数計算を使用しています。これは多くの迷惑な問題を引き起こし、多くの迷惑なコードを追加します。 浮動小数点の計算が386日ほどで非常に遅くなったことを読んだことを覚えています(IIRC)が、オプションのコプロセッサーがあったと思います。しかし、今日では指数関数的に複雑で強力なCPUを使用しているため、浮動小数点や整数の計算を行っても、「速度」に違いはありませんか?特に、実際の計算時間は、パイプラインのストールを引き起こしたり、メインメモリから何かをフェッチしたりするのに比べて短いのですか? 正しい答えはターゲットハードウェアでベンチマークすることですが、これをテストするための良い方法は何でしょうか?2つの小さなC ++プログラムを作成して、その実行時間とLinuxの「時間」を比較しましたが、実際の実行時間は変動しすぎます(仮想サーバーで実行しているのに役立ちません)。終日何百ものベンチマークの実行、グラフの作成などに費やすのではなく、相対速度の妥当なテストを行うために何かできることはありますか?アイデアや考えはありますか?私は完全に間違っていますか? 私が使用したプログラムは次のとおりですが、まったく同じではありません。 #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;cstdlib&gt; #include &lt;time.h&gt; int main( int argc, char** argv ) { int accum = 0; srand( time( NULL ) ); for( unsigned int i = 0; i &lt; 100000000; ++i ) { accum += rand( ) % 365; } …

3
C ++ 03 throw()指定子C ++ 11 noexceptの違い
実行時とコンパイル時にそれぞれチェックされることthrow()とnoexceptそれ以外に違いはありますか? このWikipedia C ++ 11の記事は、C ++ 03スロー指定子が非推奨であることを示唆しています。 なぜそうnoexceptなのか、コンパイル時にそれらすべてをカバーするのに十分な能力があるのですか? [注:この質問とこの記事を確認しましたが、サポート終了の明確な理由を判断できませんでした。]
100 c++  exception  c++11  throw  noexcept 

9
C ++仮想関数を安全にオーバーライドする
仮想関数を含む基本クラスがあり、派生クラスでその関数をオーバーライドしたい。派生クラスで宣言した関数が実際に基本クラスの関数をオーバーライドするかどうかをコンパイラに確認させる方法はありますか?古い関数を上書きするのではなく、誤って新しい関数を宣言していないことを保証するマクロまたは何かを追加したいと思います。 この例を見てみましょう: class parent { public: virtual void handle_event(int something) const { // boring default code } }; class child : public parent { public: virtual void handle_event(int something) { // new exciting code } }; int main() { parent *p = new child(); p-&gt;handle_event(1); } のparent::handle_event()代わりにここで呼び出されますchild::handle_event()。これは、子のメソッドがconst宣言を欠落しているため、新しいメソッドが宣言されているためです。これは、関数名のタイプミスまたはパラメータータイプのわずかな違いの可能性もあります。また、基本クラスのインターフェイスが変更された場合や、派生クラスが変更を反映するように更新されなかった場合にも、簡単に発生する可能性があります。 この問題を回避する方法はありますか?コンパイラまたは他のツールにこれをチェックするように指示することはできますか?役立つコンパイラフラグ(できればg ++)これらの問題をどのように回避しますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.