相关疑难解决方法(0)

什么更快,用vector :: iterator或with()迭代STL向量?

在性能方面,什么会更快?有区别吗?它是平台依赖的吗?

//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)

c++ performance iterator stl vector

57
推荐指数
6
解决办法
6万
查看次数

向量索引访问与迭代器访问的效率

我有问题要通过使用索引访问(使用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 …

c++ iterator stl vector

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

iterator ×2

stl ×2

vector ×2

performance ×1