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

C++?std::copy與memcpy區(qū)別小結(jié)

 更新時(shí)間:2024年05月08日 08:31:10   作者:魔法自動機(jī)  
本文主要介紹了C++?std::copy與memcpy區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言:最近在讀項(xiàng)目源碼,發(fā)現(xiàn)有些地方用std::copy,有些地方用memcpy。但是并不知道為什么要這樣,但是原作者也不認(rèn)識,就只好自己研究一下了。

對比

相同:

  • 都是復(fù)制拷貝函數(shù)。
  • 都是通過指針操作進(jìn)行內(nèi)存復(fù)制。

不同:

  • std::copy是C++中的函數(shù),memcpy是C中的函數(shù)。
  • std::copy更加靈活,可以在不同類型的對象之間進(jìn)行復(fù)制;memcpy只能用于字節(jié)級別的復(fù)制,不能處理自定義類型。
  • std::copy拷貝類的時(shí)候,會調(diào)用貝構(gòu)造函數(shù)或賦值運(yùn)算符來復(fù)制;memcpy只會按字節(jié)復(fù)制,不會調(diào)用類的任何成員函數(shù)。
  • std::copy的性能比memcpy會更好

使用場景

從兩者的不同點(diǎn)就可以看的出來,大致使用場景的區(qū)別了。

適合std::copy:

  • 處理非平凡類型,使用memcpy會導(dǎo)致未定義行為,std::copy能確保處理正確的生命周期。
  • 對于結(jié)構(gòu)體或者類中有指針成員變量的情況,memcpy進(jìn)行拷貝只是進(jìn)行了淺拷貝,會導(dǎo)致指針成員變量的指向不正確,從而導(dǎo)致未定義行為。
  • 當(dāng)源和目標(biāo)內(nèi)存區(qū)域有重疊的時(shí)候。

適合memcpy:

  • 對于簡單數(shù)據(jù)類型(例如int、char、float等基本的類型),使用memcpy而不是std::copy。
  • 當(dāng)源和目標(biāo)內(nèi)存區(qū)域沒有重疊,memcpy可以直接位拷貝,不會涉及迭代器和復(fù)制構(gòu)造函數(shù)等操作。

總結(jié)以下,C++才加入的類型或者自行定義的類型、涉及深拷貝、源和目標(biāo)內(nèi)存區(qū)域有重疊的時(shí)候適合std::copy,其它時(shí)候用memcpy好點(diǎn)。

補(bǔ)充:平凡類型trivial和非平凡類型non-trivial。
這個(gè)主要是針對類中的四個(gè)函數(shù)來說的:構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、賦值函數(shù)以及析構(gòu)函數(shù)。
如果滿足以下三點(diǎn)任意一點(diǎn),就是非平凡類型non-trivial:

  • 顯式定義了上面四種函數(shù)。
  • 類里面有非靜態(tài)非POD的成員(POD可以理解為包含平凡類、標(biāo)準(zhǔn)布局類)。
  • 有基類。

使用

std::copy

把src里面的內(nèi)容復(fù)制到dst。

vector<int>src= { 0, 1, 2, 3, 4 };
vector<int>dst(5, 0);
std::copy(src.begin(), src.end(),dst.begin());// src起始地址,src末尾下一個(gè),dst起始地址

memcpy

因?yàn)閙emcpy是C那邊的,所以用vector不太合適,適合簡單的數(shù)據(jù)類型。

const char src[50] = "http://www.runoob.com";
char dst[50];
// strlen(src)不包括結(jié)束符
memcpy(dst, src, strlen(src)+1);// dst起始地址,src起始地址,復(fù)制長度

到此這篇關(guān)于C++ std::copy與memcpy區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)C++ std::copy memcpy內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 基于C++實(shí)現(xiàn)柏林噪聲算法(Perlin?Noise)

    基于C++實(shí)現(xiàn)柏林噪聲算法(Perlin?Noise)

    Perlin噪聲(Perlin?noise,又稱為柏林噪聲)指由Ken?Perlin發(fā)明的自然噪聲生成算法,具有在函數(shù)上的連續(xù)性,并可在多次調(diào)用時(shí)給出一致的數(shù)值。本文將用C++實(shí)現(xiàn)柏林噪聲算法,感興趣的可以了解一下
    2023-03-03
  • 求解旋轉(zhuǎn)數(shù)組的最小數(shù)字

    求解旋轉(zhuǎn)數(shù)組的最小數(shù)字

    這篇文章主要介紹了求解旋轉(zhuǎn)數(shù)組的最小數(shù)字的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++14 新特性之函數(shù)返回值類型推導(dǎo)

    C++14 新特性之函數(shù)返回值類型推導(dǎo)

    本文主要介紹了C++14 新特性之函數(shù)返回值類型推導(dǎo),在模板編程和一些返回類型復(fù)雜或不易直接指明的情況下非常有用,下面就來具體介紹一下,感興趣的可以了解一下
    2024-05-05
  • C++11 并發(fā)指南之多線程初探

    C++11 并發(fā)指南之多線程初探

    這篇文章主要介紹了C++11 并發(fā)指南之多線程初探,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++類的定義和對象的創(chuàng)建詳解

    C++類的定義和對象的創(chuàng)建詳解

    本篇文章重點(diǎn)講解了兩種創(chuàng)建對象的方式:一種是在棧上創(chuàng)建,形式和定義普通變量類似;另外一種是在堆上使用 new 關(guān)鍵字創(chuàng)建,必須要用一個(gè)指針指向它,下面和小編一起來學(xué)習(xí)下面為文章的內(nèi)容
    2021-09-09
  • C++中靜態(tài)存儲區(qū)與棧以及堆的區(qū)別詳解

    C++中靜態(tài)存儲區(qū)與棧以及堆的區(qū)別詳解

    本篇文章是對C++中靜態(tài)存儲區(qū)與棧以及堆的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++語言實(shí)現(xiàn)線性表之鏈表實(shí)例

    C++語言實(shí)現(xiàn)線性表之鏈表實(shí)例

    這篇文章主要介紹了C++語言實(shí)現(xiàn)線性表之鏈表,實(shí)例分析了C++實(shí)現(xiàn)線性表中鏈表的原理與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C語言對對碰游戲源碼分享

    C語言對對碰游戲源碼分享

    這篇文章主要為大家分享了C語言對對碰游戲源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C語言?棧與數(shù)組的實(shí)現(xiàn)詳解

    C語言?棧與數(shù)組的實(shí)現(xiàn)詳解

    棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個(gè)棧插入新元素又稱作進(jìn)棧、入?;驂簵?,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素
    2022-04-04
  • C/C++預(yù)處理淺析使用形式

    C/C++預(yù)處理淺析使用形式

    預(yù)處理是指在進(jìn)行編譯的詞法掃描和語法分析之前所作的工作。預(yù)處理指令指示在程序正式編譯前就由編譯器進(jìn)行的操作,可放在程序中任何位置。處理完畢自動進(jìn)入對源程序的編譯。C/C++中的預(yù)處理主要包含三種:文件包含、宏定義、條件編譯
    2022-09-09

最新評論

景谷| 永靖县| 大足县| 福清市| 眉山市| 肃南| 万荣县| 蚌埠市| 海安县| 阳朔县| 建水县| 平昌县| 曲松县| 类乌齐县| 长子县| 葫芦岛市| 临沂市| 铜鼓县| 昌宁县| 钟山县| 镇平县| 旬阳县| 靖西县| 霍山县| 黑河市| 怀仁县| 蓝田县| 寿光市| 浮山县| 同仁县| 益阳市| 临朐县| 三河市| 右玉县| 老河口市| 临沧市| 长泰县| 铜梁县| 福鼎市| 台中市| 九江市|