在性能方面,什么会更快?有区别吗?它是平台依赖的吗?
//1. Using vector<string>::iterator:
vector<string> vs = GetVector();
for(vector<string>::iterator it = vs.begin(); it != vs.end(); ++it)
{
*it = "Am I faster?";
}
//2. Using size_t index:
for(size_t i = 0; i < vs.size(); ++i)
{
//One option:
vs.at(i) = "Am I faster?";
//Another option:
vs[i] = "Am I faster?";
}
Run Code Online (Sandbox Code Playgroud) 我有问题要通过使用索引访问(使用operator [])或使用迭代器来纠正我对访问向量元素的效率的理解.
我的理解是"迭代器"比"索引访问"更有效.(我认为vector::end()也比效率更高vector::size()).
现在我编写了示例代码测量它(在Windows 7下使用Cygwin,使用g ++ 4.5.3)
索引访问循环版本(以前标记为随机访问):
int main()
{
std::vector< size_t > vec ( 10000000 );
size_t value = 0;
for( size_t x=0; x<10; ++x )
{
for ( size_t idx = 0; idx < vec.size(); ++idx )
{
value += vec[idx];
}
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
迭代器循环代码是这样的:
for (std::vector< size_t >::iterator iter = vec.begin(); iter != vec.end(); ++iter) {
value = *iter;
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶地看到"索引访问"版本更快.我用time命令"测量".数字是:
结果使用
g++ source.cpp(无优化)索引访问真正的800ms
迭代器访问
真正的2200ms …