C stl vector不同遍歷方式效能比較

2021-07-09 09:29:26 字數 1653 閱讀 6489

系統:win7

ide:vs2012

今天閒來無事,想測試一下vector不同遍歷方式效能有多少差別,先上**

#include #include #include using namespace std;

int main()

int tempnum = 0;

const int test_times = 100;

large_integer freq;

queryperformancefrequency(&freq);

large_integer time0, time1, time2, time3;

queryperformancecounter(&time0);

// 遍歷方式一

for (std::vector::iterator it = vectest.begin(); it != vectest.end(); ++it)

queryperformancecounter(&time1);

// 遍歷方式二

for (auto it : vectest)

queryperformancecounter(&time2);

// 遍歷方式三

size_t maxcount = vectest.size();

for (size_t i = 0; i < maxcount; i++)

queryperformancecounter(&time3);

double sec0 = (double)time0.quadpart / freq.quadpart;

double sec1 = (double)time1.quadpart / freq.quadpart;

double sec2 = (double)time2.quadpart / freq.quadpart;

double sec3 = (double)time3.quadpart / freq.quadpart;

cout << "方式一 : " << sec1 - sec0 << endl;

cout << "方式二 : " << sec2 - sec1 << endl;

cout << "方式三 : " << sec3 - sec2 << endl;

system("pause");

return 0;

}

debug模式下執行三次,結果如下:

可以看到方式三的效能遠勝於前兩種,三和一差了十幾倍,這個差別有點大了,不過別急我們再看看release模式下執行狀況,如圖:

剛開始看到這結果時我是這樣的

然後我想這應該是被編譯器優化了,那三段**根本沒執行,於是我在後面加了一句cout << tempnum << endl;

再試一試,看圖:

哦耶,有結果了,可以看到三種方式差別很小,寫**時可以不用糾結用什麼比較高效。

不同路徑之深度遍歷模型

給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 4...

不同方式遍歷Map集合(全)

public static void main string args 第一種方法 通過map.keyset遍歷key和value for string key map.keyset 第二種方法 通過map.entryset和迭代器遍歷map iterator car map.entryset in...

Java中List,Set和Map的遍歷方法

這裡以arraylist為例 list list newarraylist list.add 張三 list.add 李四 list.add 王五 1.普通for迴圈遍歷 for int i 0 isize i 2.加強for迴圈遍歷 for string name list 3.通過迭代器遍歷 i...