当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : c++ list 元素的删除
帖子发表于 : 2009-05-05 17:24 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
问个问题
struct CTest
{
int i;
char *p;
};
typedef list<CTest *> CTestList;
void ReleaseCTest(CTest *pCTest);
int main()
{

CTestList List;//声明队列

//声明结构体对象
CTest *t1=new Ctest();
t1->p=new char [12];
...................................省略
CTest t6=new CTest();
t6->p=new char [12];

//向队列中添加数据
List.push_back(t1);
.............................省略.
List.push_back(t6);
...........................使用

最后删除,我有两中选择
1:
list<tagEnumFolder *>::iterator Iter;
Iter = List.begin();
while(Iter != List.end())
{
ReleaseCTest(*Iter);
Iter ++;
}
List.clear();
2:
list<tagEnumFolder *>::iterator Iter;
Iter = List.begin();
while(Iter != List.end())
{
CTest *pCTest=*iter;
List.pop_front(*Iter);
Iter =List.begin();
ReleseCTest(pCTest);
}
主要是这两种方法,哪个更好,更合理,希望高手指教

return 0;
}
void ReleseCTest(CTest *pCTest)
{
if(pCTest->p!=NULL)
delete [] pCTest->p;
delete pCTest;
}


页首
 用户资料  
 
2 楼 
 文章标题 : Re: c++ list 元素的删除
帖子发表于 : 2009-05-05 17:44 
头像

注册: 2006-05-20 14:03
帖子: 898
送出感谢: 0 次
接收感谢: 0 次
本人也是菜鸟,本人一般这么写
代码:
while (!list.empty())
{
ReleseCTest(list.back());
list.pop_back();
}


另外,那个pop_front貌似是没有参数的吧, :em02


页首
 用户资料  
 
3 楼 
 文章标题 : Re: c++ list 元素的删除
帖子发表于 : 2009-05-06 22:41 
头像

注册: 2006-06-19 19:19
帖子: 51
送出感谢: 0 次
接收感谢: 0 次
peachcolor 写道:
本人也是菜鸟,本人一般这么写
代码:
while (!list.empty())
{
ReleseCTest(list.back());
list.pop_back();
}


另外,那个pop_front貌似是没有参数的吧, :em02

不错!


_________________
Tiger Cheng
昆山轩辕IT培训中心
C++培训讲师
邮件:kwarph@gmail.com
主页:http://www.xuanyuan-soft.cn


页首
 用户资料  
 
4 楼 
 文章标题 : Re: c++ list 元素的删除
帖子发表于 : 2009-05-14 15:03 

注册: 2006-02-27 10:32
帖子: 267
送出感谢: 0 次
接收感谢: 0 次
只要能用,代码没有错误都很好。

只有当发现需要优化的时候才优化。。。。。

从代码的可读性上来说,我建议先释放资源,然后调用list::clear()。因为 erase() 是容易导致错误的(你注意到erase()的返回值的类型了吗?)。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: c++ list 元素的删除
帖子发表于 : 2009-05-14 15:22 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
返回值是void类型的,清除成功与否都不会报错,是吧?


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Google [Bot] 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译