std vector与std list的效率比较

一直想知道std中vector和list的效率哪个高些。

于是做了一个简单的测试,对std vector和list的push_back与遍历操作的效率进行比较。

结果如下:


1. push_back操作:连续push_back操作100000个元素,然后clear()。一直重复10000次。

vector耗时13s, list耗时118s


2. 遍历操作:采用迭代器对100000个元素的vector和list遍历,遍历10000次。
vector耗时20s, list耗时15s


可见,如果是有序的添加元素,vector比list的效率要高将近10倍,而采用迭代器遍历元素时则效率相差不大。

附代码:

[cpp]  view plain  copy
  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5.   
  6. using namespace std;  
  7.   
  8. class Message  
  9. {  
  10. };  
  11.   
  12. int main()  
  13. {  
  14.     vector vt;  
  15.     list lt;  
  16.   
  17.     Message *msg = new Message();  
  18.     time_t start = time(NULL);  
  19.     for (int i = 0; i < 10000; ++i) {  
  20.         vt.clear();  
  21.         for (int j = 0; j < 100000; ++j) {  
  22.             vt.push_back(msg);  
  23.         }  
  24.     }  
  25.   
  26.     time_t end = time(NULL);  
  27.     cout << "vector spend time " << end - start << endl;  
  28.   
  29.     start = time(NULL);  
  30.     for (int i = 0; i < 10000; ++i) {  
  31.         lt.clear();  
  32.         for (int j = 0; j < 100000; ++j) {  
  33.             lt.push_back(msg);  
  34.         }  
  35.     }  
  36.   
  37.     end = time(NULL);  
  38.     cout << "list spend time " << end - start << endl;  
  39.     delete msg;  
  40.     msg = NULL;  
  41.   
  42.     start = time(NULL);  
  43.     for (int i = 0; i < 10000; ++i) {  
  44.         typeof(vt.begin()) it = vt.begin();  
  45.         while (it != vt.end()) {  
  46.             msg = *it;  
  47.             ++it;  
  48.         }  
  49.     }  
  50.   
  51.     end = time(NULL);  
  52.     cout << "vector spend time " << end - start << endl;  
  53.   
  54.     start = time(NULL);  
  55.     for (int i = 0; i < 10000; ++i) {  
  56.         typeof(lt.begin()) it = lt.begin();  
  57.         while (it != lt.end()) {  
  58.             msg = *it;  
  59.             ++it;  
  60.         }  
  61.     }  
  62.   
  63.     end = time(NULL);  
  64.     cout << "list spend time " << end - start << endl;  
  65.   
  66.     return 0;  
  67. }  


输出:

vector spend time 13
list spend time 118
vector spend time 20
list spend time 15

你可能感兴趣的:(QT,C++,迭代器,遍历)