矢量安放我想用vector::emplace
默認構造不可複製和不可轉讓對象,然後使用迭代到新創建的對象使用對象的具體方法。請注意,沒有該類的參數化構造函數只是默認的構造函數。一個簡單的例子是:使用默認的構造函數
#include <iostream>
#include <vector>
using namespace std;
class Test {
public:
Test() {}
private:
Test(const Test&) = delete; // To make clas un-copyable.
Test& operator=(const Test&) = delete;
int a_;
};
int main() {
vector<Test> test_vec;
test_vec.emplace_back(); // <---- fails
return 0;
}
vector::emplace()
構造一個新的對象,但需要的參數,以一個非默認的構造函數。 vector::emplace_back()
將在向量的末尾構造。
有沒有一種方法來安裝默認構造。有沒有一種方法可以使用分段結構或默認轉發,可能使用std::piecewise_construct
,因爲它具有地圖功能?例如,在地圖的情況下,我們可以使用:
std::map<int,Test> obj_map;
int val = 10;
obj_map.emplace(std::piecewise_construct,
std::forward_as_tuple(val),
std::forward_as_tuple());
有什麼類似的向量?
您的類型是否可移動? – dyp 2014-11-21 18:45:41
是的,但它不可分配或可複製。請看一個例子[這裏](http://ideone.com/49LKaP)。使用'emplace_back()'會導致編譯錯誤。 – 2014-11-21 19:05:39
@RizwanC該錯誤是因爲該類型不*可移動*。用戶聲明的複製構造函數禁止生成默認的移動構造函數。您需要聲明一個默認的移動構造函數(如果願意,還可以移動賦值),此時您不需要刪除的複製操作,因爲聲明移動操作會抑制隱式生成副本。 – Casey 2014-11-21 19:06:21