发现stl的deque做随机的删除比list还要快啊
下面这个程序,构造了有5万个整数的deque和list,做查找和删除操作。发现deque比list要快。
我是在VC下面做的,deque大概花了11s,list花了将尽26s。
不是说list做删除/插入操作更快的么? 很疑惑啊。
#include"stdafx.h"#include<algorithm>#include<iostream>#include<iterator>#include<string>#include<deque>#include<list>#include<vector>using namespace std;int main(void){#define LOOP 50000 typedef int valuetype; typedef deque<valuetype> di; typedef list<valuetype> li; { di vdi; for(int i=0;i<LOOP;++i){ vdi.push_back(1); vdi.push_back(2); } DWORD ret1=GetTickCount(); for(int i=0;i<LOOP*2;++i){ di::iterator it=find(vdi.begin(),vdi.end(),2); if(it!=vdi.end())vdi.erase(it); } DWORD ret2=GetTickCount(); cout<<"deque shrink:"<<ret2-ret1<<endl; } { li vli; for(int i=0;i<LOOP;++i){ vli.push_back(1); vli.push_back(2); } DWORD ret1=GetTickCount(); for(int i=0;i<LOOP*2;++i){ li::iterator it=find(vli.begin(),vli.end(),2); if(it!=vli.end())vli.erase(it); } DWORD ret2=GetTickCount(); cout<<"list shrink:"<<ret2-ret1<<endl; } return 0;}#include"stdafx.h"#include<windows.h>#include<algorithm>#include<iostream>#include<iterator>#include<string>#include<deque>#include<list>#include<vector>using namespace std;int main(void){#define ARRAY_COUNT 2000 typedef int valuetype; typedef vector<valuetype> vi; typedef deque<valuetype> di; typedef list<valuetype> li; li *pListArray = new li[ARRAY_COUNT]; di *pDequeArray = new di[ARRAY_COUNT]; vi *pVectorArray = new vi[ARRAY_COUNT]; for(int i=0; i<ARRAY_COUNT; ++i){ for (int j = 0; j < ARRAY_COUNT; j++) { pListArray[i].push_back(j); pDequeArray[i].push_back(j); pVectorArray[i].push_back(j); } } vi::iterator *viArray = new vi::iterator[ARRAY_COUNT]; di::iterator *diArray = new di::iterator[ARRAY_COUNT]; li::iterator *liArray = new li::iterator[ARRAY_COUNT]; for (int i = 0; i < ARRAY_COUNT; i++) { viArray[i] = find(pVectorArray[i].begin(), pVectorArray[i].end(), i); diArray[i] = find(pDequeArray[i].begin(), pDequeArray[i].end(), i); liArray[i] = find(pListArray[i].begin(), pListArray[i].end(), i); } { DWORD ret1=GetTickCount(); for(int i=0;i<ARRAY_COUNT;++i){ pVectorArray[i].erase(viArray[i]); } DWORD ret2=GetTickCount(); cout<<"vector erase:"<<ret2-ret1<<endl; } { DWORD ret1=GetTickCount(); for(int i=0;i<ARRAY_COUNT;++i){ pDequeArray[i].erase(diArray[i]); } DWORD ret2=GetTickCount(); cout<<"deque erase:"<<ret2-ret1<<endl; } { DWORD ret1=GetTickCount(); for(int i=0;i<ARRAY_COUNT;++i){ pListArray[i].erase(liArray[i]); } DWORD ret2=GetTickCount(); cout<<"list erase:"<<ret2-ret1<<endl; } delete[] pListArray; delete[] pDequeArray; delete[] pVectorArray; return 0;}