首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++ vector 使用效率有关问题

2012-12-26 
c++ vector 使用效率问题1. vector中的erase方法效率是很低。因为为了保持vector中元素在内存空间中的连续

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

1楼wangeen前天 09:32
这种vector高效删除的办法的确很不错,感觉都和list差不多效率了, 可以借鉴,++iter和iter++有具体的比较数据,效率差多少吗?

热点排行