C++ stl list 获取size()函数非常慢,跟shi一样,生产环境中使用被坑了,有时间看一下源码,严重怀疑是现算的。
#include <iostream> #include <list> #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/timeb.h> #include <memory.h> using namespace std; typedef long long __int64; typedef __int64 INT64;
static inline INT64 GetSystemTime() { struct timeb loTimeb; memset(&loTimeb, 0 , sizeof(timeb)); ftime(&loTimeb); return ((INT64)loTimeb.time * 1000) + loTimeb.millitm; }
int main() { INT64 start, end; start = GetSystemTime(); std::list<int> msglist; for(int i=0;i<2000000; i++) { msglist.push_back(i); } end = GetSystemTime(); cout<< " time = "<< end - start<<endl;
start = GetSystemTime();
for(int i=0;i<1000;i++) { msglist.size(); } end = GetSystemTime(); cout<< " time = "<< end - start<<endl;
start = GetSystemTime();
int id; while(!msglist.empty()) { id = msglist.front(); msglist.pop_front(); } end = GetSystemTime(); cout<< " time = "<< end - start<<endl;
return 0; }
[xx@localhost ThreadSafe]$ g++ testList.cpp -o list [xx@localhost ThreadSafe]$ [xx@localhost ThreadSafe]$ [xx@localhost ThreadSafe]$ [xx@localhost ThreadSafe]$ ./list time = 584 time = 12247 time = 132