vector遍历的效率
一直以来都以为vector的遍历的效率很高,网上文章都建议用。但是不知道是我的编译器有问题还是怎么回事。请看下面的测试代码
void testfunc()
{
for(int i=0; i<10; i++);
}
////////////////////////////////////////////////////////////
void test()
{
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
DWORD dw1 = GetTickCount();
for(int i=0; i<1000000; i++){
for(vector<int>::iterator it=a.begin(); it!=a.end(); it++){
}
}
TRACE1("vector need time %d\n", GetTickCount()-dw1);
DWORD dw2 = GetTickCount();
for(int i=0; i<1000000; i++){
for(int j=0; j<4; j++){
testfunc();
}
}
TRACE1("vector need time %d\n", GetTickCount()-dw2);
}
最后测试结果是:
用vector的迭代遍历用时7953ms
直接for遍历,而且还加上4次函数调用,用时172ms
这是DEBUG下测试结果。本来还以为是DEBUG下可能vector的迭代遍历效率低,RELEASE下会好。
但是结果是失望的,总运行次数各变成100000000,vector用时2047,直接for用时0.