社区
C++ 语言
帖子详情
如何删除list中的对象?
liaomingxue
2009-06-04 10:32:05
list<Student> list1;
list1.push_back((*)(new Student()));
list1.push_back((*)(new Student()));
那么如何删除中间创建的两个Student指针指向的内存空间?
...全文
891
20
打赏
收藏
如何删除list中的对象?
list list1; list1.push_back((*)(new Student())); list1.push_back((*)(new Student())); 那么如何删除中间创建的两个Student指针指向的内存空间?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CHINAonlyQiu
2010-12-06
打赏
举报
回复
Student_list.erase(stud2);如果说其中的stud2是逆序的一个list对象,即list <stuInfo> :: reverse_iterator stud1,stud2;那将如何解决呢?好像是erase中没有这样的重载函数哦!
iambic
2009-06-04
打赏
举报
回复
另外,那两个指针不是list中的对象。
goodname
2009-06-04
打赏
举报
回复
这样用没法删除。必须得把指针保存下来才可以删除。
不必非的使用new,直接创建对象就行。
list1.push_back(Student());
iambic
2009-06-04
打赏
举报
回复
滥用指针,没法删除了。
liaomingxue
2009-06-04
打赏
举报
回复
[Quote=引用 9 楼 GS_Neo 的回复:]
UP,建议楼主看一下list的用法。。。。
STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。
在使用 list、set 或 map遍历删除某些元素时可以这样使用:
正确使用方法1 std::list < int> List;
std::list < in…
[/Quote]
谢谢你的办法。但是你的办法不是解决我的问题的办法。因为list <Student>而不是list <Student*>。
10楼的兄弟说的还是有道理的。
jkdfjkdf
2009-06-04
打赏
举报
回复
[Quote=引用 8 楼 liaomingxue 的回复:]
我也有同感,但别人定义了一个这样的类型,我也没有法子
[/Quote]
if 你可以改
用指针好了, 简单
else if 你不能改 && 能联系到那个别人
钉死他, 让他改
else if 人品好 {
拼人品, 反正程序结束就会被干掉, 只要调的不多, 泄露的就不厉害.
同情.
} else { /* 人品不好 */
扎小草人, 那小针扎 ...
更同情.
}
GS_Neo
2009-06-04
打赏
举报
回复
UP,建议楼主看一下list的用法。。。。
STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。
在使用 list、set 或 map遍历删除某些元素时可以这样使用:
正确使用方法1 std::list< int> List;
std::list< int>::iterator itList;
for( itList = List.begin(); itList != List.end(); )
{
if( WillDelete( *itList) )
{
itList = List.erase( itList);
}
else
itList++;
}
或
正确使用方法2 std::list< int> List;
std::list< int>::iterator itList;
for( itList = List.begin(); itList != List.end(); )
{
if( WillDelete( *itList) )
{
List.erase( itList++);
}
else
itList++;
}
下面是两个错误的使用方法:
错误使用方法1 std::list< int> List;
std::list< int>::iterator itList;
for( itList = List.begin(); itList != List.end(); itList++)
{
if( WillDelete( *itList) )
{
List.erase( itList);
}
}
或
错误使用方法2 std::list< int> List;
std::list< int>::iterator itList;
for( itList = List.begin(); itList != List.end(); )
{
if( WillDelete( *itList) )
{
itList = List.erase( ++itList);
}
else
itList++;
}
正确使用方法1:通过erase方法的返回值来获取下一个元素的位置
正确使用方法2:在调用erase方法之前先使用 “++”来获取下一个元素的位置
错误使用方法1:在调用erase方法之后使用“++”来获取下一个元素的位置,由于在调用erase方法以后,该元素的位置已经被删除,如果在根据这个旧的位置来获取下一个位置,则会出现异常。
错误使用方法2:同上。
这里“++”运算符与我们平常的理解刚好相反,erase( itList++) 是先获取下一个元素的位置在删除; erase( ++itList) 是删除以后再获取下一个元素的位置。
在使用 vector、deque遍历删除元素时,也可以通过erase的返回值来获取下一个元素的位置:
正确使用方法 std::vector< int> Vec;
std::vector< int>::iterator itVec;
for( itVec = Vec.begin(); itVec != Vec.end(); )
{
if( WillDelete( *itVec) )
{
itVec = Vec.erase( itVec);
}
else
itList++;
}
注意:vector、deque 不能像上面的“正确使用方法2”的办法来遍历删除。
liaomingxue
2009-06-04
打赏
举报
回复
[Quote=引用 5 楼 jkdfjkdf 的回复:]
我怎么感觉这两个 new Student()无法删除呀, 为什么不用指针咧?
[/Quote]
我也有同感,但别人定义了一个这样的类型,我也没有法子
liaomingxue
2009-06-04
打赏
举报
回复
[Quote=引用 5 楼 jkdfjkdf 的回复:]
我怎么感觉这两个 new Student()无法删除呀, 为什么不用指针咧?
[/Quote]
我也有同感,但别人定义了一个这样的类型,我也没有法子
liaomingxue
2009-06-04
打赏
举报
回复
[Quote=引用 2 楼 codecola 的回复:]
先遍历,再delete, 然后erase
list <Student>::iterator it = list1.begin();
{
//找到要删除的元素
Student* p = *it;
delete p;
erase(it);
}
[/Quote]
这个不行,因为是list <Student>而不是list <Student*>
jkdfjkdf
2009-06-04
打赏
举报
回复
我怎么感觉这两个 new Student()无法删除呀, 为什么不用指针咧?
adventurelw
2009-06-04
打赏
举报
回复
要么创建有计数的智能指针或者句柄类封装
要么就是记住,什么时候不需要了遍历到那个位置删掉。
wangyadong
2009-06-04
打赏
举报
回复
个人感觉不如压入指针,最后在删除list 元素的时候delete掉
codecola
2009-06-04
打赏
举报
回复
先遍历,再delete, 然后erase
list<Student>::iterator it = list1.begin();
{
//找到要删除的元素
Student* p = *it;
delete p;
erase(it);
}
w0911h
2009-06-04
打赏
举报
回复
好像只能自己定位到那两个对象指针,然后delete
liuwg9999
2009-06-04
打赏
举报
回复
student *s=(student *)(&(*it));取的是什么呢?
wanyuzhen
2009-06-04
打赏
举报
回复
push_back()函数存放的是一份Student对象的拷贝,
原来在堆区的匿名对象 new Student()无法删除
jxwch
2009-06-04
打赏
举报
回复
为什么要加new呢?
hongzao
2009-06-04
打赏
举报
回复
[Quote=引用楼主 liaomingxue 的帖子:]
list <Student> list1;
list1.push_back((*)(new Student()));
list1.push_back((*)(new Student()));
那么如何删除中间创建的两个Student指针指向的内存空间?
[/Quote]
你在堆中申请的那两块内存在push_back()函数结束的时候就已经泄漏了.
atom210
2009-06-04
打赏
举报
回复
删不掉了。。。
java
list
中
对象
排序_java
中
List
对象
排序通用方法
本文实例讲述了java
中
List
对象
排序通用方法。分享给大家供大家参考。具体分析如下:在数据库
中
查出来的列表
list
中
,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库
中
查询。如果不到数据库查询,直接在第一次查出来的
list
中
排序,无疑会提高系统的性能。只要把第一次查出来的结果存放在session
中
,就可以对
list
重新排序了。一般对
list
排序可以使用Collection...
【JSR303 校验入参
List
中
的
对象
】
目录1. 简介2. 问题描述3. 问题解决4. JSR303的使用及配置 1. 简介 项目
中
使用的spring validate + jsr303对接口的入参
对象
进行校验。 今天在项目
中
编写某一个功能时,需要传入一个
List
对象
的数据。然后便产生了对标题所描述问题的思考:JSR303如何校验
List
中
的
对象
? 2. 问题描述 如下代码: public ResponseResult orderSent(@Validate @RequestBody
List
<OrderSentQuery> orde
Java处理两个
List
集合
中
对象
数据合并处理数据后为同一个
List
集合
对象
描述: 比如一个
List
集合
中
List
<
对象
1>,该
对象
1包含A、B和C列 另外一个
List
集合
中
List
<
对象
2>,该
对象
2包含A、D列 问题:需要将两个
List
合成
List
<
对象
3>返回,该
对象
3包含A、B、C、D列 解决:1.需要判断出哪个
List
集合的数据比较少,例如第二个集合数据少,可以执行: Map<String,User2...
Java
中
List
对象
集合按照
对象
某一属性字段排序
Java
中
,
List
集合
对象
,默认有一个排序方法sort(Comparator<? super E> c),如果传递null,那是对简单类型的排序,如果是
对象
类型,并且是需要按照
对象
类型的某一个属性字段排序,就需要我们传入排序的规则。 show me the code: package com.xxx.huali.hualitest.sort; import java.util.Array
List
; import java.util.Collections; import ...
Java
list
中
的
对象
转为
list
,
list
中
的
对象
转为map
借鉴了 https://www.cnblogs.com/exmyth/p/11012873.html https://blog.csdn.net/fengfengchen95/article/details/102621844 有一个
对象
集合
List
<AdminMedia> adminMedia
List
取得
对象
集合
中
的Path字段作为新的
List
List
<String> path
List
= adminMedia
List
.stream().map(AdminMedia -&g
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章