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

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

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

今天做c++ primer題目實(shí)現(xiàn)標(biāo)準(zhǔn)庫(kù)vector,emplace_back忽然發(fā)現(xiàn)我對(duì)其了解甚少,首先,我在網(wǎng)上找到答案的代碼,之前有過(guò)了解emplace_back是通過(guò)移動(dòng)構(gòu)造函數(shù)實(shí)現(xiàn)的,那么問(wèn)題來(lái)了,如果我想實(shí)現(xiàn)vector<Base> b這樣,我將其移動(dòng)構(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;
};

這似乎符合我們的期望,可當(dāng)我嘗試使用自定義的版本(也就是網(wǎng)上那些"高手"的,還是外國(guó)人放在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)...);
}

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

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

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

分析如下代碼:

#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);//開(kāi)辟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ù)都沒(méi)有調(diào)用過(guò)
  }
}

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

相關(guān)文章

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

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

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

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

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

    cmake 學(xué)習(xí)筆記

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

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

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

    C語(yǔ)言超細(xì)致講解分支語(yǔ)句

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

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

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

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

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

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

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

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

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

    Dev-C++中文亂碼問(wèn)題的解決辦法

    述Dev-C++是一款非常簡(jiǎn)潔實(shí)用的C/C++集成開(kāi)發(fā)環(huán)境,因?yàn)楦咧袇⒓痈?jìng)賽的原因我也一直有使用它,下面這篇文章主要給大家介紹了關(guān)于Dev-C++中文亂碼問(wèn)題的解決辦法,需要的朋友可以參考下
    2023-02-02

最新評(píng)論

郎溪县| 岑溪市| 东安县| 张家港市| 西吉县| 钟山县| 正阳县| 巢湖市| 延边| 中宁县| 贵溪市| 灵宝市| 凌海市| 龙陵县| 阳信县| 乡城县| 桦南县| 新津县| 博客| 木里| 修水县| 峨眉山市| 昌图县| 林甸县| 濉溪县| 周口市| 长武县| 吕梁市| 本溪| 乌拉特前旗| 思茅市| 深州市| 吴堡县| 兴宁市| 台江县| 大悟县| 建瓯市| 张家口市| 田阳县| 抚顺市| 承德县|