国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++11 emplace

2019-11-11 06:03:34
字體:
來源:轉載
供稿:網友

emplace操作是C++11新特性,新引入的的三個成員emlace_front、empace 和 emplace_back,這些操作分別對應push_front、insert 和push_back,允許我們將元素放在容器頭部、一個指定的位置和容器尾部,而他們之間卻有一些不同,emplace*等操作根據參數執行相應的構造函數,如果傳入的參數為容器元素類型則執行拷貝構造(這點和后三則相同),后三者在執行時會調用拷貝構造或則賦值運算符。

如下我們有一個類定義如下:

class emTest {public: emTest():data(0){ cout << "emTest()" << endl; } emTest(int data):data(data) { cout << "emTest(int)" << endl; } ~emTest() { cout << "~emTest()" << endl; } emTest(const emTest& that) { cout << "emTest(&)" << endl; data = that.data; } friend ostream& Operator<< (ostream& os, const emTest& that);PRivate: int data;};ostream& operator<< (ostream& os, const emTest& that) { os << that.data; return os;}

通過類定義我們看到,有默認構造函數,接收一個整形參數的構造函數,還有一個拷貝構造函數,咱們可以使用emplace在vector首部放置元素,使用方法如下:

//調用默認構造函數vec.emplace(vec.begin()); //調用接收int參數的構造函數vec.emplace(vec.begin(), 4);//調用拷貝構造函數emTest em;vec.emplace(vec.begin(), em);

main函數內的測試代碼如下:

int main(){ vector<emTest> vm; vm.reserve(4); emTest et(3); cout << "------------------------------------" << endl; vm.emplace(vm.begin(), et); vm.emplace(vm.begin() + 1); vm.emplace(vm.begin() + 2, 4); for(vector<emTest>::iterator i = vm.begin(); i < vm.end(); i++){ cout<< *i; } printf("/n"); cout << "------------------------------------" << endl;}

測試輸出如下:

emTest(int)------------------------------------emTest(&) //vm.emplace(vm.begin(), et); 拷貝構造emTest() //vm.emplace(vm.begin() + 1); 默認構造emTest(int) //vm.emplace(vm.begin() + 2, 4); 接收一個int參數的構造函數304 //vector內的元素值------------------------------------~emTest() //程序退出時釋放vector內存空間~emTest()~emTest()~emTest()

我們對vector vm在使用push_front(vector沒有提供),insert,push_back,時不能通過傳入int來插入元素,于此同時在不同的平臺上還會有較大的可能構造臨時對象,效率可能相對較低。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 崇文区| 内丘县| 大兴区| 邢台市| 苗栗县| 班戈县| 嘉黎县| 平南县| 南宫市| 荆门市| 临武县| 南乐县| 柘城县| 册亨县| 孝感市| 内丘县| 嘉义县| 苍梧县| 托克托县| 额尔古纳市| 进贤县| 镇巴县| 炎陵县| 凌源市| 泰州市| 东乌| 富阳市| 琼海市| 抚松县| 海丰县| 玉门市| 永仁县| 瑞丽市| 海口市| 鄂托克前旗| 兰坪| 丽江市| 文安县| 安陆市| 镇平县| 池州市|