C ++ emplace_back

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_backpush_back、それはまた、より高い効率を持っているので、プロセスをコピー未満:

int*他の変数に種類vector使用して、emplace_back程度の速度をpush_back約2倍の。参照コード:
CPP-コード・スニペット/ vector_emplace_back_push_back.cpp

参考リンク

std ::ベクトル<T、アロケータ> :: emplace_back

C ++ STLのベクトル:: emplace_back

emplace_back対一back

CPP-コード・スニペット/ vector_emplace_back_object.cpp

CPP-コード・スニペット/ vector_emplace_back_push_back.cpp

发布了100 篇原创文章 · 获赞 9 · 访问量 6万+

おすすめ

転載: blog.csdn.net/keineahnung2345/article/details/104089241