关于C++中的STL

关于C++中的STL,第1张

楼主,你给的信息不够多,无法判断你到底要做什么。

为什么你要用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)<<' '


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9867950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存