MSVCRT std::vector 新しいページはコチラ
提供: yonewiki
(→概要) |
(→メンバ関数 emplace_back) |
||
99行: | 99行: | ||
※C++17以降は2つ目に書いたように TypeTemplate& のような挿入したデータへの参照を返却され、受け取ることができます。 | ※C++17以降は2つ目に書いたように TypeTemplate& のような挿入したデータへの参照を返却され、受け取ることができます。 | ||
− | + | ※似た動作をする関数にpush_backという関数があります。emplace_backでは完全転送という処理が行われるためコンストラクタの呼び出しが少なく、処理速度が向上するという利点があります。push_backでは、値を渡したときにコンストラクタがそのあとvector型に格納するときもコンストラクタが呼ばれる仕組みになっています。そしてムーブ処理や値のコピーの処理が発生します。一方emplace_backは右辺値を渡した場合、コンストラクタが呼ばれてそのままvector型に取り込まれます。渡す値が右辺値でない場合は、計算量は同じになります。大量のTypeTemplate型のコンストラクタの引数にガチするデータでコンストラクタの処理が複雑の場合にvector型に格納するときには、良いと思います。大量ですよ。大量。最初の1回の処理には時間がかかるので、大量にvector型を使って、小さなオブジェクトを大量に作る場合もemplace_pushがいいみたい。じゃpush_backって利点がないんじゃ?ふむ、自分もそう思います。 | |