发现list的remove操作比find+erase要慢,为什么?
网上很多人说list的remove要比erase快。
我用VC测试了一下,发现并非如此,生成50000个随机数,逐个删除:
#include"stdafx.h"#include<windows.h>#include<algorithm>#include<iostream>#include<iterator>#include<string>#include<deque>#include<list>#include<map>#include<vector>using namespace std;int main(void){#define LOOP 50000#define TOTAL LOOP*2 typedef int valuetype; typedef list<valuetype> li; int* pRand=new int[TOTAL]; int* pSort=new int[TOTAL]; for(int i=0;i<TOTAL;++i){ pRand[i]=rand(); } copy(pRand,pRand+(TOTAL),pSort); sort(pSort,pSort+(TOTAL),less<int>()); { li vli; for(int i=0;i<TOTAL;++i){ vli.push_back(pRand[i]); } DWORD ret1=GetTickCount(); for(int i=0;i<TOTAL;++i){ //li::iterator it=find(vli.begin(),vli.end(),pSort[ i ]); //if(it!=vli.end())vli.erase(it); vli.remove(pSort[ i ]); } DWORD ret2=GetTickCount(); cout<<"list shrink:"<<ret2-ret1<<endl; } return 0;}