为什么你要用multiset,每次填一个结构体进去然后又clear掉?
目前到的有以下问题,建议改掉:
首先,C++程序不建议使用malloc/free,而推荐使用new/delete
然后,是multiset容器的问题。
multiset::clear只是把对象从multiset中移除,而没有把它们从内存中移除,导致内存泄漏。
解决方案:
第一步,添加析构函数,把:
typedef struct
{
int l_project_id//项目号
int l_branch_id//部门号
}pro
typedef pro * PPro
改为:
struct pro
{
int l_project_id//项目号
int l_branch_id//部门号
static pro* create() //用于建立一个新的pro对象
{
return new pro()
}
~pro() { delete this}//析构时删除自身
private: //私有的构造,防止不通过new构造
pro() {}
}
typedef pro *PPro
第二步,创建对象时使用我们包装过的new,而不是malloc:
PPro proins = pro::create()
第三步,修改clear那一行为:
project.erase(project.begin(), project.end())
//erase会对每一个对象进行析构,从而调用了delete进行释放
这样才是STL的真正的用法
包括头文件:
#include <algorithm>
#include <set>
集合函数:
set<int> S1,S2
S1.insert(1)//插入一个元素1
S2.insert(2)//插入一个元素2
set<int>::iterator site //迭代器,用法同vector
set<int> Si
set<int>vis
set_intersection( S.begin(), S.end(), S2.begin(), S2.end(), inserter( Si, Si.begin() ) ) //Si为求交后的集合
set_union(...)//并,语法同上
set_difference(...) //差,语法同上
vis.clear() 移除set容器内所有元素
vis.count(s) 返回vis中值为s的个数
if(vis.count(s)) 判断s是否在集合vis中
vis.find(s) 返回s所在位置,如找不到,返回end(),即为vis,fing(s)==vis.end() vis.insert(s) 把s加入集合
vis.remove(s) 从集合中移除s
输出:
set<int>::iterator ii
for(ii=si.begin()ii!=si.end()ii++)
cout<<(*ii)<<' '
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)