C++分析研究  
C++
日历
<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456
统计
  • 随笔 - 92
  • 文章 - 4
  • 评论 - 4
  • 引用 - 0

导航

常用链接

留言簿

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
  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<vec.size();)

  {

  if( some condition )

  {

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

  vec.pop_back();

  }

  else

  {

  i ++ ;

  }

  }

  2.迭代器使用

  vector<int> int_vec;

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

  {

  …

  }

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

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

posted on 2013-03-12 20:10 HAOSOLA 阅读(843) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © HAOSOLA Powered by: 博客园 模板提供:沪江博客
PK10开奖 PK10开奖