erase删除后移动元素改进算法
来源:互联网 发布:2015网络剧排行榜 编辑:程序博客网 时间:2024/04/28 21:39
vector中的erase方法效率是很低的,因为为了保持vector中元素在内存空间中的连续性,在删除某个元素之后,需要将其后的元素依次向前移动一个位置,平均复杂度为o(n)。
gcc 下erase的实现如下:
iterator erase(iterator position)
{
if (position + 1 != end())
copy(position + 1, finish, position); // 后续元素往前移动
--finish;
destroy(finish); // 一个释放资源的全局函数
return position;
}
今天在去除停用词的时候就遇上了这个问题,慢慢调试,发现就是在erase这个地方花费了大量时间。
解决办法:
如果要删除了元素在最后一个位置,则不需要移动其他元素,只需要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 ++ ;
}
}
- erase删除后移动元素改进算法
- vector删除元素erase和通用算法remove
- erase-remove删除容器元素
- c++ vector erase删除元素
- 关于vector中使用erase删除元素后导致越界的问题
- 删除vector容器中的对象元素的三种方法:pop_back, erase与remove算法
- remove/remove_if算法配合容器的erase方法实现容器删除元素功能
- 删除vector容器中的对象元素的三种方法:pop_back, erase与remove算法
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- (转)vector中使用erase删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- Web工程师必备的18款工具
- Beginning Jailbroken iOS Development - Your First Tweak
- 写给现在迷茫的自己
- STD map易错之下标插入元素
- Oracle存储过程常见异常
- erase删除后移动元素改进算法
- 程序员技术路线全攻略
- Fibnacci序列
- iOS核心系统编程最佳实践:地图
- [NOI 2003] 文本编辑器 editor
- iOS核心系统编程最佳实践:支付
- iOS核心系统编程最佳实践:游戏
- utf-8和改版312编码的问题
- servlet 笔记