美国上市公司

亿元级外企IT培训企业

  • 全国服务监督电话400-111-8989
  • c++ vector 使用效率问题

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

  • 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 执行线程对象

2001-2016 达内时代科技集团有限公司 版权所有 京ICP备08000853号-56