vector中的元素删除
删除vector中的元素,最容易的方法就是使用vector的erase()函数。
vector vec;
for ( vector::iterator iter = vec.begin(); iter! = vec.end();)
{
if(某条件成立)
iter = vec.erase(iter);
else
iter ++;
}
如果要清空vector中的元素,可以使用erase()循环删除,也可以用clear()函数。
for ( vector::iterator iter = vec.begin(); iter! = vec.end();)
{
iter = vec.erase(iter);
}
//或者直接clear
vec.clear();
需要注意,如果vector中存储的元素是指针,那么erase()或者clear()并不会删除指针指向的对象或者内存空间,要小心内存泄漏问题。
此外,还需要注意的是,erase()函数虽然会删除指定位置的元素,但是元素所占用的内存空间并不会被释放掉,也就是说,被删除的元素所占的内存空间还是被vector占有的,而没有被系统回收。
要解决这个问题可以使用vector中的swap()函数。
假设vector vec起初有1000个元素,后来删掉500个,那么要释放掉那500个int所占的空间,可以这样:
std::vector(vec).swap(vec);
//上面这行代码相当于下面两行
//即先产生一个跟vec中现有内容相同且占用空间刚好满足其大小的vector tmp
//然后把tmp与vec对换
//当出了tmp的作用域(例如下面的一对大括号)后,tmp所占的空间就被释放掉了
{
std::vector tmp(vec);
tmp.swap(vec);
}
感谢:http://blog.csdn.net/ywh147/article/details/9345715
vector中的元素删除的更多相关文章
- AJPFX关于对集合中的元素删除操作和注意点
import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class ForeTest2 { ...
- JavaScript中数组元素删除的七大方法汇总
原文链接:https://blog.csdn.net/u010323023/article/details/52700770 在JavaScript中,除了Object之外,Array类型恐怕就是最常 ...
- 关于Vector中的元素中含有指针成员的情况
对于容器,当容器的各个元素为类类型,且该类类型中含有指针成员时: 如果类类型的析构函数中包含了对指针变量指向内存的释放操作,则在利用clear()函数删除容器所有元素时,会自动调用类的析构函数,自动实 ...
- javascaipt中数组元素删除方法delete和splice
一.用delete 删除数组中元素(少用) 说明:delete: 只是被删除的元素变成了 undefined ,即数组长度不变 //定义数组 var array=["aa",&qu ...
- javascript中数组元素删除方法splice,用在for循环中巨坑
一.demo splice: 该方法会改变自动原始数组长度 实例: var array = ["aa","dd","cc","aa ...
- (c++ std) 查找 vector 中的元素
You can use std::find from <algorithm>: std::find(vector.begin(), vector.end(), item) != vecto ...
- C++之vector中元素删除
今天在删除vector中的元素中遇到一个问题,这里记录下来以便以后查阅. 预备知识:用到了erase()函数,对于一个容器c来说,假设迭代器为p,那么执行: c.erase(p)之后就删除了容器c中p ...
- STL 中 使用迭代器删除元素的问题
在vector中删除,大家都知道,直接erase的话,这种写法很有问题.因为erase(iter)之后iter指针就变成野指针了,此时继续iter++就会出问题. for(auto iter = v. ...
- 【转】java.util.vector中的vector的详细用法
[转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...
随机推荐
- phalcon(费尔康)框架学习笔记
phalcon(费尔康)框架学习笔记 http://www.qixing318.com/article/phalcon-framework-to-study-notes.html 目录结构 pha ...
- java 多线程8(join)
join(): 加入.一个线程如果执行了join语句,那么就有新的线程加入,执行该语ij 句的线程必须要让步给新加入的线程先完成任务,然后才能继续执行. import java.util.Scann ...
- 利用JAXB实现java实体类和xml互相转换
1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...
- 1.2 认识ASP.NET MVC项目结构
1.开发环境 操作系统:xp.vista.windows 7.windows 8.windows server 2003|2008|2008R2|2012: 集成开发环境IDE: Vsiual Stu ...
- Qt之加载QSS文件
简述 Qt中关于样式的使用很常见,为了降低耦合性(与逻辑代码分离),我们通常会定义一个QSS文件,然后编写各种部件(例如:QLable.QLineEdit.QPushButton)的样式,最后使用QA ...
- 笔记7:winfrom的一些知识点(一)
一.MDI窗体 private void 添加窗体ToolStripMenuItem_Click(object sender, EventArgs e) { Form2 frm1 = new Form ...
- java 三大框架 介绍
三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...
- PHP Warning: ob_start() : output handler 'ob_gzhandler conflicts with 'zlib output compression'
安装phpcms过程中,会遇到Warning: ob_start() : output handler 'ob_gzhandler conflicts with 'zlib output compr ...
- Eclipse启动tomcat 报“ A child container failed during start”
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]] at org.ap ...
- DOI EXCEL显示报表
我这个是比较不规则的数据填充 1.程序开头,定义一个工作区,存对应单元格的值: BEGIN OF TY_EXCEL, C031() TYPE C, C032() TYPE C, C033() TYPE ...