問題タブ [emplace]

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 投票する
1 に答える
686 参照

c++11 - 一時オブジェクトの作成を避けるためにマップに挿入/配置する方法は?

一時オブジェクトの作成 (挿入されるオブジェクトのコンストラクター/デストラクタの呼び出し) を回避するために、項目をコンテナーに追加するときにemplace優先するC++11 の本の 1 つからの推奨事項を読んでいます。insertしかし、オブジェクトをマップに追加する方法がいくつかあるため、少し混乱しています。

そのようなコードを読んだときにすぐには見えない内部メカニズムもいくつか含まれています-完全な転送、暗黙的な変換...

マップ コンテナにアイテムを追加する最適な方法は何ですか?

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

c++ - emplace_back は代入演算子をベクトルで呼び出しますが、リストでは呼び出しません

http://www.cplusplus.com/reference/vector/vector/emplace_back/に従って 、 emplace_back は代入演算子を呼び出さずにオブジェクトを作成することを理解しました。ただし、std::vector の場合は代入演算子を呼び出し、std::list の場合は代入演算子を呼び出しません。

私のオブジェクトはコピーできません。ポインタを使用する以外に問題を回避する方法はありますか。

また、ベクトル内の消去は代入演算子を呼び出すようですが、リスト内の消去は代入演算子を呼び出しません。これは私には間違っているようでした..

std はコピーできないオブジェクトをサポートしていませんか?

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

c++ - 可変個引数テンプレートを使用したカスタム コンテナの配置

単純な循環ベクトル クラスを実装しています。emplace メンバー関数を実装したいのですが、理解できないエラーが発生します。私が間違っていることを簡単に修正できるかもしれませんが、可変個引数テンプレートの経験があまりないので、何が原因なのかわかりません...

私が得ているエラーは次のとおりです。

このエラーを生成するソース コードは次のとおりです (ここにもありますhttp://coliru.stacked-crooked.com/a/37d50d6f23363357 ):

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

c++ - 値が std::set (何かからセットへのマップ) である std::map で emplace() を使用する方法は?

問題

というstd::map<int, std::set<int>>名前がありmisiます。misi.emplace(2345, {6, 9});以下に示すように、なぜ期待どおりに動作しmisi.emplace({2345, {6, 9}});ないのか疑問に思っています。

コード

上記は、イニシャライザ リスト コンストラクタと完全に機能std::setすることがわかります。emplace()

上記はstd::mapto のintものintで、メソッドも完全に機能することがわかりますが、最後の例では、std::pairが何らかの形で冗長である可能性があります。std::pairはその場で構築されているのだろうか。(まあ、そうではないと思います)

astd::mapから a のstd::set場合、イニシャライザ リスト コンストラクタは上記のように完全に機能します。しかし、そうでemplace()はありません!(下図参照)

ここでは、次の構文は問題ありませんが、私が望んでいたことを正確には実行しません。

std::pairということで、インプレースを作成する方法はないようで、はインプレースstd::setで作成されているようです (そうですか?)。誰にもアイデアはありますか?

私が使用しているコンパイラは次のとおりです。

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

dictionary - 地図:: V コンストラクターが 2 つのパラメーターを必要とする場所に配置

map::emplace で見つけることができるすべての例は、単一の引数を取るコンストラクターを持つかなり単純な型を使用しています。

値型コンストラクターに 2 つのパラメーターが必要であるとします。一体、本当に簡単にしましょう。値のタイプが であるとしますstd::pair<std::string, double>std::map<string, pair<string, double> >::emplace()マップ内で値の型をインプレースで構築するにはどうすればよいですか?

私はこれがうまくいかないことを知っています:

少なくとも、g++ 4.8.2 では大声で失敗します。これは C++11 でも可能ですか?

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

c++ - emplace_back(pair) を効率的に行うには?

私は持っている

そして、保持と保持をemplace_back持つ要素が必要です。このコンパイルを取得できる唯一の方法は、かなり不器用なものを使用することでしたpair::first{i,j,k}pair::secondq

これは効率的ですか (つまり、s が最適化されて除去されることが保証されていますか)? tupleまたは、効率的であることが保証されている別の方法はありますか?

(私は試した

しかし、gcc 4.8.1 では役に立ちません)。定義することでこの問題を回避できることを知っています

しかし、私はそのような余分なコードなしでやりたいと思っています。

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

c++11 - std::vector に配置されたインスタンスのアドレスが無効です

私は2std::vector秒持っています:

  • 最初のベクトルに、インスタンスを配置します
  • 2番目のベクトルに、配置したばかりのインスタンスのアドレスを格納したい

しかし、それは機能しません。つまり、格納されたアドレスは、配置されたインスタンスのアドレスとは異なります。

それが問題である場合、私は Linux を使用しており、g++ 5.1 と -std=c++11 を指定して clang 3.6 を使用しています。

問題を説明するための実際の例を次に示します。

質問

  • それは正しい動作ですか?一時インスタンスのアドレスを保存していることが原因だと思いますが、標準で許可されているかどうかを知りたいです(ただ興味があります)。
  • 上記が当てはまる場合、これを回避するにはどうすればよいですか? 最初のものを に変更することでこれを解決しましvector<unique_ptr<Foo>>たが、慣用的な方法はありますか?
0 投票する
4 に答える
2956 参照

c++ - unordered_map に unordered_set を配置

unordered_set をコピーせずに、(静的に定義された) unordered_set を unordered_map に追加するにはどうすればよいですか?

私はこれを試しました:

この:

しかし、どれもコンパイルされません。(それぞれ)次のエラーが発生します。

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

boost - boost::lockfree::spsc_queue に emplace がないのはなぜですか?

レギュラーstd::vectorにはemplace_back不要なコピーを避ける機能があります。spsc_queueこれをサポートしない理由はありますか?emplace何らかの理由でロックフリー キューを使用することはできませんか?