久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

深入研究 C 中的 STL Deque 容器 3

 fisher60 2012-08-05

深入研究 C++中的 STL Deque 容器

  實驗四—— vector::insert() 和 deque::insert() 執(zhí)行特點比較

  目的

  deque主張使用參數(shù)為常量的insert(),。但怎么樣能和vector::insert()比較一下呢,?本實驗的目的就是比較一下vector::insert()> 和 deque::insert()的工作特點。

  描述

  在容器的容器多次插入數(shù)據(jù),,在這里可能不符合你的需求,,既然這樣你可以使用insert(),試驗代碼也和實驗一基本一樣,,使用insert()代替push_back(),,使用insert(>)來測試。

  結(jié)果

  當(dāng)插入常量給deque的時候,,從下圖可以看出和vector的對比來,。


  注意兩張圖片中時間軸的不同,這是將>61810個數(shù)據(jù)插入到容器中,。


  實驗五——讀取容器的性能

  目的

  這個實驗將測試vector::at(),vector::operator[],deque::at()和deque::operator[]的性能,。首先應(yīng)該是operator[]比at()效率要高,因為它不進行邊界檢查,,同時也比較vector和deque。

  描述

  這個實驗將測試中的容器有1000000個類型為std::string,,每個字符串長度為1024的數(shù)據(jù),,分別使用at()和operator[]這兩個操作來訪問容器容器的數(shù)據(jù),測試它們運行的時間,,這個測試執(zhí)行50次,,統(tǒng)計每次執(zhí)行的結(jié)果,。

  結(jié)果

  我們看到使用vector和deque訪問容器中的數(shù)據(jù),他們執(zhí)行的性能差別很小,,使用operator[]和at()訪問數(shù)據(jù)的性能差別幾乎可以忽略不計,,下面是統(tǒng)計的結(jié)果:


vector::at()

Mean

1.177088125sec

Maximum

1.189580000sec

Minimum

1.168340000sec

Std. Dev

0.006495193sec

6-Sigma

0.038971158sec

deque::at()

Mean

1.182364375sec

Maximum

1.226860000sec

Minimum

1.161270000sec

Std. Dev

0.016362148sec

6-Sigma

0.098172888sec

vector::operator[]

Mean

1.164221042sec

Maximum

1.192550000sec

Minimum

1.155690000sec

Std. Dev

0.007698520sec

6-Sigma

0.046191120sec

deque::operator[]

Mean

1.181507292sec

Maximum

1.218540000 sec

Minimum

1.162710000sec

Std. Dev

0.010275712sec

6-Sigma

0.061654272sec

  結(jié)論

  在這篇文章中我們覆蓋了多種不同的情況來選擇我們到底是該使用vector還是deque。讓我們總結(jié)一下測試的結(jié)果看下面幾個結(jié)論,。

  當(dāng)執(zhí)行大數(shù)據(jù)量的調(diào)用push_back()的時候,,記住要調(diào)用vector::reserve()。

  在實驗一中我們研究了vector和deque在插入數(shù)據(jù)的情況,。通過這些假設(shè),,我們可以看出deque分配的空間是預(yù)先分配好的,deque維持一個固定增長率,,在vector實驗中我們考慮到應(yīng)該調(diào)用vecor::reserve()>.然后在下面這個例子驗證了我們的假設(shè),,在使用vector的時候調(diào)用reserve()能夠膀子我們預(yù)先分配空間,這將是vector一個默認選擇的操作,。

  當(dāng)你分配很多內(nèi)存單元的時候,,記住使用deque回收內(nèi)存要比vector消耗時間多。

  在實驗三中我們探討了vector和deque在回收非鄰接內(nèi)存塊上的不同,,分別證明了vector在分配內(nèi)存的時候是線性增長,,而deque是指數(shù)增長,同樣,,vector要回收的內(nèi)存比deque多的多,,如果你循環(huán)調(diào)用了push_back(),那么deque將獲取大量的內(nèi)存,,而且是臨近的,。我們通過測試發(fā)現(xiàn)在分配內(nèi)存單元消耗的時間和vector的時間接近。

  如果你計劃使用insert(),,或者需要pop_front(),,那就使用deque。

  由于vector沒有提供pop_front()函數(shù),,但在實驗四的結(jié)果中可以看出沒有insert()是非常好的,,同時也告訴我們?yōu)槭裁磀eque在STL類中要作為單獨的一個類劃分出來。

  對于訪問數(shù)據(jù),,vector::at()效率最高,。

  在實驗五中統(tǒng)計的數(shù)據(jù)表示,所有訪問數(shù)據(jù)方法的效率是非常接近的,,但是vector::at()效率最高,。這是因為最優(yōu)的平衡圖訪問時間為最低的六個西格瑪值。

  最后

  我希望本文能夠帶你認識deque,,而且對它感興趣或者一個啟發(fā),,歡迎繼續(xù)討論關(guān)于vector和deque任何問題和內(nèi)容,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多