C ++ emplace_back
emplace_back
C ++ 11の前に、我々は唯一持っているstd::vector::push_back
私たちは、一時的なオブジェクトを作成する必要がありますので、その後、コールはpush_back
(実際にコピーされた)それを置くvector
に。
C ++ 11は、導入されたstd::vector::emplace_back
ことは、指定した場所にオブジェクトを作成するコンテナを構築するために、次にその場で、入力として、その要素の引数のコンストラクタを取ることができ、。これは、構文がより簡潔で、私たちは一時的なオブジェクトを避けることができることができます:
#include <iostream>
#include <vector>
class Rectangle{
public:
Rectangle(int h, int w): height(h), width(w){
area = height * width;
};
int get_area(){
return area;
}
private:
int area;
int height;
int width;
};
int main(){
std::vector<Rectangle> rects;
rects.push_back(Rectangle(10,20));
rects.emplace_back(20,30);
return 0;
}
フルコードCPP-コード・スニペット/ vector_emplace_back_object.cpp。
ためemplace_back
でpush_back
、それはまた、より高い効率を持っているので、プロセスをコピー未満:
int*
他の変数に種類vector
使用して、emplace_back
程度の速度をpush_back
約2倍の。参照コード:
CPP-コード・スニペット/ vector_emplace_back_push_back.cpp。
参考リンク
std ::ベクトル<T、アロケータ> :: emplace_back