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

このタグは、C ++ 11としてコンパイルする必要があるコードに使用します(C ++ 14以降で導入された機能は使用しません)。

9
1つのベクトルのみを使用する基準を使用して、2つのベクトルを同じ方法で並べ替えるにはどうすればよいですか?
1つのベクトルのみを使用する基準を使用して、2つのベクトルを同じ方法で並べ替えるにはどうすればよいですか? たとえば、同じサイズの2つのベクトルがあるとします。 vector<MyObject> vectorA; vector<int> vectorB; 次に、vectorAいくつかの比較関数を使用して並べ替えます。その並べ替えは並べ替えられましたvectorA。同じ並べ替えを適用するにはどうすればよいvectorBですか? 1つのオプションは、構造体を作成することです。 struct ExampleStruct { MyObject mo; int i; }; その後、ソートの内容が含まれているベクトルvectorAとvectorB、単一のベクターにジップアップ: // vectorC[i] is vectorA[i] and vectorB[i] combined vector<ExampleStruct> vectorC; これは理想的な解決策とは思えません。特にC ++ 11で他のオプションはありますか?
85 c++  c++11 

4
c ++ 0x:参照によりパラメーターとしてラムダを受け取る適切な方法
int->int参照によってラムダパラメーターを受け取る関数を定義する正しい方法は何ですか? void f(std::function< int(int) >& lambda); または void f(auto& lambda); 最後の形式が正当な構文であるかどうかはわかりません。 ラムダパラメーターを定義する他の方法はありますか?

5
列挙型と強く型付けされた列挙型
私はC ++プログラミングの初心者です。 今日、私は新しいトピックに出くわします:強くタイプされた enum。私はそれを少し研究しましたが、今まで私はこれが必要な理由と同じものの使用法を見つけることができません。 たとえば、次の場合です。 enum xyz{a, b, c}; /*a = 0, b = 1, c = 2, (Typical C format)*/ なぜ書く必要があるのですか: enum class xyz{a, b, c}; ここで何をしようとしていますか?私の最も重要な疑問は、それをどのように使用するかです。私に理解してもらうための小さな例を教えてください。
84 c++  c++11  enums 

1
指定されたテンプレートパラメータを持つC ++ 11make_pairはコンパイルされません
-std = c ++ 11を有効にしてg ++ 4.7(後のスナップショットの1つ)で遊んでいました。私は既存のコードベースのいくつかをコンパイルしようとしましたが、失敗した1つのケースはやや混乱します。 誰かが何が起こっているのか説明していただければ幸いです。 コードは次のとおりです。 #include <utility> #include <iostream> #include <vector> #include <string> int main ( ) { std::string s = "abc"; // 1 ok std::pair < std::string, int > a = std::make_pair ( s, 7 ); // 2 error on the next line std::pair < …

11
c ++ 11で整数スレッドIDを取得する方法
c ++ 11には現在のスレッドIDを取得する可能性がありますが、整数型にキャストすることはできません。 cout<<std::this_thread::get_id()<<endl; 出力:139918771783456 cout<<(uint64_t)std::this_thread::get_id()<<endl; エラー:タイプ 'std :: thread :: id'からタイプ 'uint64_t'への無効なキャスト他のタイプと同じ:タイプ 'std :: thread :: id'からタイプ 'uint32_t'への無効なキャスト 整数のスレッドIDを取得するためにポインターキャストを実行したくありません。それを行うための合理的な方法(ポータブルにしたいので標準)はありますか?

3
移動したコンテナを再利用しますか?
移動したコンテナを再利用する正しい方法は何ですか? std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2); 私がC ++ 0x標準ドラフトで読んだものから。ver3は正しい方法のようです。移動後のオブジェクトは、 「特に明記されていない限り、そのような移動元のオブジェクトは、有効であるが指定されていない状態に置かれるものとします。」 「他の方法で指定された」インスタンスは見つかりませんでした。 ver3は少し回り道で、ver1の方がはるかに好ましいと思いますが、vec3は追加の最適化を可能にしますが、一方で、簡単に間違いを引き起こす可能性があります。 私の仮定は正しいですか?

1
C ++ 11での文字列リテラルのUnicodeエンコーディング
関連する質問に続いて、C ++ 11の新しい文字と文字列リテラルタイプについて質問したいと思います。現在、4種類の文字と5種類の文字列リテラルがあるようです。文字タイプ: char a = '\x30'; // character, no semantics wchar_t b = L'\xFFEF'; // wide character, no semantics char16_t c = u'\u00F6'; // 16-bit, assumed UTF16? char32_t d = U'\U0010FFFF'; // 32-bit, assumed UCS-4 そして文字列リテラル: char A[] = "Hello\x0A"; // byte string, "narrow encoding" wchar_t B[] = L"Hell\xF6\x0A"; …

6
std :: threadがまだ実行されているかどうかを確認する方法は?
std::threadがまだ実行されているかどうかを(プラットフォームに依存しない方法で)確認するにはどうすればよいですか?それはtimed_join()方法を欠いており、そのためのものでjoinable()はありません。 std::lock_guardスレッド内のaでミューテックスをロックし、ミューテックスのtry_lock()メソッドを使用して、それがまだロックされている(スレッドが実行されている)かどうかを判断することを考えましたが、不必要に複雑に思えます。 もっとエレガントな方法を知っていますか? 更新:明確にするために:スレッドが正常に終了したかどうかを確認したいと思います。「ぶら下がっている」スレッドは、この目的で実行されていると見なされます。



5
std :: arrayとアレイのパフォーマンス
次のような非常に単純な配列を作成したい場合 int myArray[3] = {1,2,3}; std::array代わりに使用する必要がありますか? std::array<int, 3> a = {{1, 2, 3}}; std :: arrayを通常のものよりも使用する利点は何ですか?それはよりパフォーマンスが良いですか?コピー/アクセスの処理が簡単ですか?
84 c++  c++11  stdarray 

4
std :: unique_ptrを渡す方法は?
私はC ++ 11を使用する最初の試みをしていunique_ptrます。1つのクラスが所有しているが、頻繁に渡される私のプロジェクト内のポリモーフィックなrawポインターを置き換えています。 以前は次のような機能がありました。 bool func(BaseClass* ptr, int other_arg) { bool val; // plain ordinary function that does something... return val; } しかし、私はすぐに私が切り替えることができないことに気づきました: bool func(std::unique_ptr<BaseClass> ptr, int other_arg); 呼び出し元は関数へのポインターの所有権を処理する必要があるため、私はしたくありません。だから、私の問題に対する最善の解決策は何ですか? 私は次のように、参照としてポインタを渡すことを考えました: bool func(const std::unique_ptr<BaseClass>& ptr, int other_arg); しかし、そうすることには非常に不快感を覚えます。第一に、すでに入力さ_ptrれているものを参照として渡すのは本能的ではないように思われるため、参照の参照となるものです。第二に、関数のシグネチャがさらに大きくなるためです。第三に、生成されたコードでは、変数に到達するために2つの連続したポインターの間接化が必要になるためです。
83 c++  c++11  unique-ptr 

6
ifステートメントとif-elseステートメントのどちらが速いですか?[閉まっている]
クローズ。この質問はもっと焦点を合わせる必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てるようにします。 3年前に閉鎖されました。 この質問を改善する 先日、この2つのスニペットについて友人と議論しました。どちらが速いのか、そしてその理由は? value = 5; if (condition) { value = 6; } そして: if (condition) { value = 6; } else { value = 5; } value行列の場合はどうなりますか? 注:私はそれvalue = condition ? 6 : 5;が存在することを知っており、より高速になることを期待していますが、それはオプションではありませんでした。 編集(質問は現在保留中のため、スタッフから要求されました): 最適化されたバージョンと最適化されていないバージョンの両方でメインストリームコンパイラ(g ++、clang ++、vc、mingwなど)によって生成されたx86アセンブリまたはMIPSアセンブリのいずれかを検討して回答してください。 アセンブリが異なる場合は、バージョンが高速である理由と時期を説明してください(たとえば、「分岐がないため、分岐に次の問題が発生するため、より良い」)

4
新しいランダムライブラリがstd :: rand()よりも優れているのはなぜですか?
そこで、rand()は有害と見なされるという話を見て、単純なstd::rand()プラスモジュラスパラダイムよりも乱数生成のエンジン分布パラダイムを使用することを提唱しました。 しかし、私はstd::rand()直接の失敗を見たかったので、簡単な実験をしました: 基本的に、私は2つの機能を書いたgetRandNum_Old()とgetRandNum_New()それが使用して0から5までの間の乱数を生成std::rand()し、std::mt19937+std::uniform_int_distributionそれぞれ。 次に、「古い」方法を使用して960,000(6で割り切れる)の乱数を生成し、0〜5の数値の頻度を記録しました。次に、これらの周波数の標準偏差を計算しました。私が探しているのは、分布が本当に均一である場合に起こることになるので、可能な限り低い標準偏差です。 そのシミュレーションを1000回実行し、各シミュレーションの標準偏差を記録しました。また、ミリ秒単位でかかった時間を記録しました。 その後、まったく同じことを繰り返しましたが、今回は「新しい」方法で乱数を生成しました。 最後に、新旧両方の方法の標準偏差のリストの平均と標準偏差、および新旧両方の方法の時間のリストの平均と標準偏差を計算しました。 結果は次のとおりです。 [OLD WAY] Spread mean: 346.554406 std dev: 110.318361 Time Taken (ms) mean: 6.662910 std dev: 0.366301 [NEW WAY] Spread mean: 350.346792 std dev: 110.449190 Time Taken (ms) mean: 28.053907 std dev: 0.654964 驚いたことに、ロールの総広がりは両方の方法で同じでした。つまり、std::mt19937+std::uniform_int_distributionは単純なstd::rand()+よりも「均一」ではありませんでした%。私が行った別の観察は、新しいものは古い方法よりも約4倍遅いということでした。全体として、品質の向上がほとんどないのに、スピードに莫大なコストを払っていたように見えました。 私の実験には何らかの欠陥がありますか?それともstd::rand()、それほど悪くはなく、おそらくもっと良いのでしょうか? 参考までに、私が使用したコード全体を次に示します。 #include <cstdio> #include <random> #include <algorithm> #include …
82 c++  c++11  random 

3
ラムダを受け入れる関数を宣言するにはどうすればよいですか?
標準ライブラリ(などstd::find)でラムダを使用する方法を説明する多くのチュートリアルをインターネットで読みました。それらはすべて非常に興味深いものでしたが、自分の関数にラムダを使用する方法を説明するチュートリアルは見つかりませんでした。 例えば: int main() { int test = 5; LambdaTest([&](int a) { test += a; }); return EXIT_SUCCESS; } どのように宣言すればよいLambdaTestですか?その最初の引数のタイプは何ですか?次に、引数として「10」を渡す無名関数を呼び出すにはどうすればよいですか?
82 c++  lambda  c++11 

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