ぷろみん

プログラミング的な内容を扱ってます

push_backよりもemplace_backを使おう

emplace

push_backでは無駄なコストが発生してしまいます。
そこで、直接コンストラクトできるemplace_backがC++11から追加されました。

#include<vector>

namespace torini{

struct Data{
    Data(int, int, int){}
};

}

int main(){
    std::vector<torini::Data> v;
    // 無駄にコンストラクトしてしまう
    v.push_back(torini::Data(0, 1, 2));

    // 綺麗だし、コンストラクトコストが発生しない
    v.emplace_back(0, 1, 2);
}

使い分け

全部emplace_backでも良い気はしますが、あえて明示的にする為にコンストラクタが存在する要素の場合のみemplace_backを使う等が良い気がします。