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 <iostream>  
  2. #include <vector>  
  3. #include <list>  
  4. #include <ctime>  
  5.   
  6. using namespace std;  
  7.   
  8. class Message  
  9. {  
  10. };  
  11.   
  12. int main()  
  13. {  
  14.     vector<Message*> vt;  
  15.     list<Message*> 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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值