最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 淺談emplace_back及使用誤區(qū)

 更新時間:2020年12月10日 15:49:51   作者:RGBMarco  
這篇文章主要介紹了C++ 淺談emplace_back及使用誤區(qū),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

今天做c++ primer題目實現(xiàn)標準庫vector,emplace_back忽然發(fā)現(xiàn)我對其了解甚少,首先,我在網(wǎng)上找到答案的代碼,之前有過了解emplace_back是通過移動構(gòu)造函數(shù)實現(xiàn)的,那么問題來了,如果我想實現(xiàn)vector<Base> b這樣,我將其移動構(gòu)造函數(shù)顯式刪除,那么

b.emplace_back(....),還能工作嗎? 答案是 : 能

//Base.h
#include<string>
class Base
{
public:
Base() = default;
Base(std::string t,int m):s(t),i(m){}
Base(const Base& b):s(b.s),i(b.i){}
Base(Base&&) = delete;
private:
std::string s;
int i;
};

這似乎符合我們的期望,可當我嘗試使用自定義的版本(也就是網(wǎng)上那些"高手"的,還是外國人放在github的,呵呵啦,害我找這么久原因,不是坑嗎?) 自定義版本如下:

template<typename T>
template<class ...Args>
void
Vec<T>::emplace_back(Args&& ...args)
{
chk_n_alloc();
alloc.construct(first_free++, std::forward<Args>(args)...);
}

補充知識:C++11新特性,推薦使用emplace_back()替換push_back()的原因

c++11新加入了emplace_back()用來替換push_back():

在平時我們習慣性的尾插用push_back()去完成,但是如果是尾插臨時對象的話,push_back()需要先構(gòu)造臨時對象,再將這個對象拷貝到容器的末尾,而emplace_back()則直接在容器的末尾構(gòu)造對象,這樣就省去了拷貝的過程。

分析如下代碼:

#include<bits/stdc++.h>
using namespace std;
int i=0,j=0;
class A {
public:
  A(int i){
    str = to_string(i);
    cout << "構(gòu)造函數(shù)" <<++i<< endl; 
  }
  ~A(){}
  A(const A& a): str(a.str){
    cout << "拷貝構(gòu)造" <<++j<< endl;
  }
 
public:
  string str;
};
 
int main(){
  vector<A> vec;
  vec.reserve(10);//開辟capacity
  for(int i=0;i<10;i++){
    vec.push_back(i); //調(diào)用了10次構(gòu)造函數(shù)和10次拷貝構(gòu)造函數(shù),
//    vec.emplace_back(i); //調(diào)用了10次構(gòu)造函數(shù)一次拷貝構(gòu)造函數(shù)都沒有調(diào)用過
  }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方歡迎留言討論,望不吝賜教。

相關(guān)文章

  • C++實現(xiàn)LeetCode(65.驗證數(shù)字)

    C++實現(xiàn)LeetCode(65.驗證數(shù)字)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(65.驗證數(shù)字),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中的多態(tài)問題—理解虛函數(shù)表及多態(tài)實現(xiàn)原理

    C++中的多態(tài)問題—理解虛函數(shù)表及多態(tài)實現(xiàn)原理

    這篇文章主要介紹了C++中的多態(tài)問題—理解虛函數(shù)表及多態(tài)實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • cmake 學習筆記

    cmake 學習筆記

    這篇文章主要介紹了作者學習cmake 的相關(guān)資料與心得,有需要的小伙伴可以參考下
    2017-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)算法之實現(xiàn)快速傅立葉變換

    C語言數(shù)據(jù)結(jié)構(gòu)算法之實現(xiàn)快速傅立葉變換

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)算法之實現(xiàn)快速傅立葉變換的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言超細致講解分支語句

    C語言超細致講解分支語句

    分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設計方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當?shù)姆种дZ句
    2022-05-05
  • 淺析c與c++中struct的區(qū)別

    淺析c與c++中struct的區(qū)別

    c與c++中struct的區(qū)別你是否了解,下面小編就詳細的為大家介紹一下
    2013-07-07
  • C語言Turbo C下實現(xiàn)俄羅斯方塊

    C語言Turbo C下實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細介紹了C語言Turbo C下寫的俄羅斯方塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C++ vector類的模擬實現(xiàn)方法

    C++ vector類的模擬實現(xiàn)方法

    這篇文章主要介紹了C++ vector類的模擬實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 使用Inotify 監(jiān)控目錄與文件的方法詳解

    使用Inotify 監(jiān)控目錄與文件的方法詳解

    本篇文章是對使用Inotify 監(jiān)控目錄與文件的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Dev-C++中文亂碼問題的解決辦法

    Dev-C++中文亂碼問題的解決辦法

    述Dev-C++是一款非常簡潔實用的C/C++集成開發(fā)環(huán)境,因為高中參加競賽的原因我也一直有使用它,下面這篇文章主要給大家介紹了關(guān)于Dev-C++中文亂碼問題的解決辦法,需要的朋友可以參考下
    2023-02-02

最新評論

潼南县| 新竹县| 苏州市| 嘉峪关市| 潞西市| 肥东县| 红河县| 淮阳县| 四平市| 无锡市| 政和县| 鄄城县| 济南市| 梅州市| 陆河县| 防城港市| 五大连池市| 英吉沙县| 双峰县| 江陵县| 宝丰县| 安吉县| 公主岭市| 龙南县| 淮滨县| 永丰县| 邵武市| 慈溪市| 娱乐| 武功县| 大厂| 浦东新区| 沧州市| 陇南市| 民权县| 徐水县| 黎平县| 金华市| 砚山县| 建昌县| 安陆市|