c++ vector 使用效率问题

[来源] 达内    [编辑] 达内   [时间]2013-03-11

c++ vector 使用效率问题

  1. vector中的erase方法效率是很低。

  因为为了保持vector中元素在内存空间中的连续性,在删除某个元素之后,需要将其后的元素依次向前移动一个位置,平均复杂度为o(n)。

  gcc 下erase的实现如下:

  iterator erase(iteratorposition)

  {

  if (position + 1 != end())

  copy(position + 1, finish, position); // 后续元素往前移动

  --finish;

  destroy(finish); // 一个释放资源的全局函数

  return position;

  }

  解决办法:

  如果要删除了元素在最后一个位置,则不需要移动其他元素,只需要o(1)的时间开销,基于这种思想,可以实现一种高效的vector中删除元素的方法

  for(int i=0; i

  {

  if( some condition )

  {

  swap( vec[i], vec[vec.size()-1]);

  vec.pop_back();

  }

  else

  {

  i ++ ;

  }

  }

  2.迭代器使用

  vector int_vec;

  for( vector::iterator iter = int_vec.begin(); iter != int_vec.end(); ++ iter)

  {

  …

  }

  千万注意要使用++iter 不能使用iter++

  iter++ 是先拷贝一份值,再进行++,效率很低

资源下载