vector经常会用到,也经常会遍历,笔者工作需要测了下几种遍历方法的性能,贴在这里。
代码如下:
#include <cstdio>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<string> v;
string s;
void init1()
{
for (size_t i = 0; i < 100000; i++)
{
v.push_back("hello");
}
}
void init2()
{
vector<string> v(100000);
for (size_t i = 0; i < 100000; i++)
{
v[i] = "hello";
}
}
void traversal1()
{
int n = v.size();
for (size_t i = 0; i < n; i++)
{
s = v[i];
}
}
void traversal2()
{
for (size_t i = 0; i < v.size(); i++)
{
s = v[i];
}
}
void traversal3()
{
for (vector<string>::iterator it = v.begin(); it != v.end(); it++)
{
s = *it;
}
}
void traversal4()
{
for(string temp:v)
{
s = temp;
}
}
void traversal5()
{
for each (string var in v)
{
s = var;
}
}
int main()
{
init1();
init2();
traversal1();
traversal2();
traversal3();
traversal4();
traversal5();
}
结果如下:
可见第一种遍历方式性能最佳,
第四种第五种遍历方式虽然写起来很简洁,但是性能渣得像坨屎
提前分配好容器大小会比动态增加容器大小性能要好,但是使用起来不是很方便。