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