日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入

發(fā)布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? 操作系統(tǒng)是Windows10 64bit,編譯器是 Microsoft Virtual Studio Community 10。編譯產(chǎn)出是64位測試程序。(轉(zhuǎn)載請指明出于breaksoftware的csdn博客)

? ? ? ? 因為加入測量,就會導(dǎo)致誤差。我已經(jīng)盡量將環(huán)境影響降低,但是還是難免有誤差。大家可以通過文后附的工程自行測量,結(jié)果可能和我存在一定的出入。

? ? ? ? 文中將測試vector、list、forward_list、deque、set(multiset)、unordered_set(unordered_multiset)、map(multimap)和unordered_map(unordered_multimap)。沒有討論stack、queue和priority_queue,是因為它們底層是使用deque或者vector實現(xiàn)的。

template <class T, class Container = deque<T> > class stack;
template <class T, class Container = deque<T> > class queue;template <class T, class Container = vector<T>,class Compare = less<typename Container::value_type> > class priority_queue;

? ? ? ? 增加和刪除操作將從容器的頭部、中部、尾部三個位置進行對比;這兒的三個位置并非是指其物理地址關(guān)系,而是指通過迭代器表現(xiàn)的位置關(guān)系。

? ? ? ? 遍歷分為從頭部和尾部兩個方向遍歷;

? ? ? ? 查找操作只對比set和map系列容器。因為其他容器的查找都需要遍歷進行對比,性能遠不及這兩類容器。

插入

頭部插入

元素個數(shù)>15000

insert_begin_16384_highest

? ? ? ? ?vector性能最差,且和其他容器相比,要差好幾倍。我們再看看其他容器的表現(xiàn)

insert_begin_16384

? ? ? ? 表現(xiàn)最好的是deque。

元素個數(shù)<1024

insert_begin_1024_highest

? ? ? ? 元素個數(shù)在900左右以上時,vector的效率開始差于所有的容器。

? ? ? ? 元素個數(shù)在650到900之間,list的效率比其他容器都差。

元素個數(shù)<256

insert_begin_256_highest

? ? ? ? vector的效率要高于除了unordered_set之外的其他關(guān)聯(lián)容器。

結(jié)果對比:

? ? ? ? deque的性能是最好的,其次是unordered_set(神一般的存在)。

? ? ? ? 當元素個數(shù)比較多時,vector的性能是最差的。

? ? ? ? forward_list要優(yōu)于list。

? ? ? ??除了unordered_set,其他關(guān)聯(lián)容器性能都比非關(guān)聯(lián)容器(除了vector)要差。

? ? ? ??當元素個數(shù)比較多(大概大于2500)時,set的性能要高于map。multi系列的都要優(yōu)于非multi系列(除了unordered_set)。比如multimap優(yōu)于map;unordered_multimap優(yōu)于unordered_map。

? ? ? ? 當元素個數(shù)比較少(大概小于256)時,有序關(guān)聯(lián)容器的性能比無序(unordered)關(guān)聯(lián)容器要高(除了unordered_set)。

中間插入

元素個數(shù)>15000

insert_mid_16384_highest

? ? ? ? vector容器性能是最差的。再看下其他容器

insert_mid_16384

? ? ? ? forward_list和list的性能是最好的。然后是deque和set。

? ? ? ? set容器是所有關(guān)聯(lián)容器中性能最好的。

? ? ? ? map和multimap性能僅優(yōu)于vector。

元素個數(shù)<4096

insert_mid_4096_highest

? ? ? ? 元素個數(shù)大于2000左右開始,vector的性能將比所有容器都要差。

元素個數(shù)<256

insert_mid_256_highest

? ? ? ? vector的性能要優(yōu)于其他容器。

? ? ? ? 當元素個數(shù)超過255時,deque的性能才超過vector。

結(jié)果對比:

? ? ? ? 當元素個數(shù)小于256時,vector的效率是最高的。但是隨著元素個數(shù)增多,vector將變成性能最差的容器。

? ? ? ? forward_list、list和deque在不同元素個數(shù)時表現(xiàn)的都很優(yōu)異。

? ? ? ? set容器是所有關(guān)聯(lián)容器中性能最好的。

尾部插入

元素個數(shù)>15000

insert_end_16384_highest

? ? ? ? vector性能是最好的,其次是deque。

? ? ? ? map性能是最差的。

結(jié)論:

? ? ? ? 在尾部插入時,vector的性能是最好的。其他兩個場景下,vector的性能都是最差的。但是在中間插入場景,容器元素個數(shù)小于256時,vector還是最優(yōu)的。但是之后衰退嚴重。

? ? ? ? deque在頭部和尾部插入元素場景下性能優(yōu)異。

? ? ? ? list和forward_list在中間插入元素場景下性能優(yōu)異。

? ? ? ? 在關(guān)聯(lián)容器中,只有在頭部插入場景下的unordered_set性能極其優(yōu)異。

? ? ? ? 當元素個數(shù)較多時,set的性能要優(yōu)于map。

? ? ? ? 文中圖例可從如下地址獲取:https://github.com/f304646673/stl_perf/tree/master/windows

總結(jié)

以上是生活随笔為你收集整理的C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。