美国上市公司
亿元级外企IT培训企业

400-111-8989

热门课程

c++ vector 使用效率问题

  • 时间:2014-12-29
  • 发布:IT培训
  • 来源:资料库

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++ 是先拷贝一份值,再进行++,效率很低

上一篇:copy构造隐藏的陷阱
下一篇:C++ Builder 执行线程对象

java技术有哪些优点优势

选择城市和中心
贵州省

广西省

海南省