社区
C++ 语言
帖子详情
如何删除list中的对象?
liaomingxue
2009-06-04 10:32:05
list<Student> list1;
list1.push_back((*)(new Student()));
list1.push_back((*)(new Student()));
那么如何删除中间创建的两个Student指针指向的内存空间?
...全文
926
20
打赏
收藏
如何删除list中的对象?
list list1; list1.push_back((*)(new Student())); list1.push_back((*)(new Student())); 那么如何删除中间创建的两个Student指针指向的内存空间?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
删不掉了。。。
如何在
list
中
删除
我指定的
对象
本文介绍了在Java
中
从
List
中
删除
指定
对象
的三种有效方法:通过创建临时
List
保存待删
对象
、使用倒序循环逐个移除以及利用Iterator进行
删除
。每种方法都附带了详细的代码示例。
python
删除
list
集合
中
的某一个
对象
_
List
在执行remove方法不能
删除
指定的
对象
本文探讨了
List
在
删除
元素时的remove方法,指出在
删除
时首先通过equals进行
对象
比较。若要正确
删除
对象
,应当重写equals方法,或者直接使用下标
删除
。同时提醒注意,
删除
下标时确保传入的是int类型,避免Integer类型导致的调用错误。此问题在实际项目
中
可能导致
删除
操作失效。
Java
删除
集合
list
内的
对象
Iterator
本文讲述了如何在Java
中
使用迭代器Iterator避免改变
list
长度,通过示例展示了如何
删除
list
中
特定用户
对象
的操作,强调了迭代器在处理动态修改集合的重要性。
List
删除
对象
本文介绍了一种在Java
中
从
List
中
删除
特定
对象
的有效方法。通过直接
删除
目标
对象
后,再利用
List
.remove(null)移除可能产生的null引用,解决了因
对象
类型为Object而带来的
删除
难题。
java
list
移除
对象
_Java编程:
删除
List
元素的三种正确方法
博客指出
删除
List
中
的元素会有元素数量变化和并发问题。通过多个代码示例展示了移除
List
中
对象
的不同方法,分析了错误方法产生数组越界、未彻底
删除
数据、并发修改异常等问题的原因,也给出了正确的
删除
逻辑。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章