1. 程式人生 > >訪問vector元素方法的效率比較

訪問vector元素方法的效率比較

相信會來看這篇部落格的人,應該都認識vector了,所以我就直接上測試程式碼了,我是在vs2015中測試的:

#include<iostream>
#include<vector>
#include<windows.h>
using namespace std;



int main() {
    //建立4個vector,使用列表初始化,相當與呼叫拷貝建構函式
    vector<int> v1;
    int temp;
    int i;
    for (i = 0; i < 100000; ++i) {
        v1.push_back(i);
    }
    //測試1
DWORD start,end; start= GetTickCount(); for (i = 0; i < v1.size(); ++i) { temp=v1[i]; } end = GetTickCount(); cout << "使用[]運算子耗時:" << end - start << "ms" << endl; //測試2 start = GetTickCount(); for (auto k = v1.begin(); k < v1.end(); ++k) { temp = *k; } end = GetTickCount(); cout
<< "使用迭代器(++k)耗時:" << end - start << "ms" << endl; //測試3 start = GetTickCount(); for (auto k = v1.begin(); k < v1.end(); k++) { temp = *k; } end = GetTickCount(); cout << "使用迭代器,使用k++,而不是++k:" << end - start << "ms" << endl; //測試4
start = GetTickCount(); i = 0; for (auto k = v1.begin(); i<v1.size(); ++i,++k) { temp = *k; } end = GetTickCount(); cout << "使用迭代器,不使用end()方法:" << end - start << "ms" << endl; system("pause"); return 0; }

輸出:
這裡寫圖片描述

OK,從分析結果:

當然,如我們只是單純的從前面兩個結果來看,你會發現使用下標運算子的效率會比使用迭代器高一些。其實主要是在訪問迭代器是要進行迭代器越位、有效性、是否指向同一容器等方面的判斷,比較耗時。我們會發現測試4就是驗證我我們的假設,因為執行end()函式是比較耗時的,所以我就不用它,發現迭代器訪問會比下標還快。除了這些差別外,我們比較測試2和測試3的結果,會發現測試3比測試2慢了兩倍,其實這個也就是為啥我們推薦在寫:++k和k++的時候,能用++k,就用++k的原因。