C++ emplace_back
emplace_back
在C++11之前,我們只有std::vector::push_back
,因此我們得先創建一個temporary object,然後呼叫push_back
把它放入(實際上是複製)vector
裡。
C++11引入了std::vector::emplace_back
,它可以接受其元素的constructor的參數當作輸入,然後in-place地在容器所指定的位置上建創建物件。它讓我們可以免去temporary object,使語法更為簡潔:
#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-code-snippets/vector_emplace_back_object.cpp。
因為emplace_back
跟push_back
比起來少了複製的過程,所以它還能擁有更高的效率:
將int*
型別的變數放入vector
,使用emplace_back
的速度約為push_back
的兩倍左右。代碼可以參考:
cpp-code-snippets/vector_emplace_back_push_back.cpp。
參考連結
std::vector<T,Allocator>::emplace_back
vector::emplace_back in C++ STL
来源:CSDN
作者:keineahnung2345
链接:https://blog.csdn.net/keineahnung2345/article/details/104089241