实验目的: 1.了解set的实现原理 2.熟练掌握set的基本操作 实验器材: C++ 实验内容: 实现两个学生集合的交、并、补 实验步骤: #include<iostream> #include<set> using namespace std; //案例:两个集合的交、并、差 class Stu { string sno; string name; public: Stu(string s,string n){sno=s;name=n;} void show()const{cout<<sno<<" "<<name<<endl;} bool operator<(Stu s2) const { return sno<s2.sno; } }; class MySet { set<Stu> s; public: MySet(Stu *first,Stu *last):s(first,last){} void bing(MySet set2) { set<Stu> temp=s; set<Stu>::iterator it=set2.s.begin(); for(;it!=set2.s.end();it++) temp.insert(*it); disp(temp); cout<<endl; } void jiao(MySet set2) { set<Stu> temp; set<Stu>::iterator i=s.begin(); for(;i!=s.end();i++) { if(set2.s.find(*i)!=set2.s.end()) temp.insert(*i); } disp(temp); cout<<endl; } void cha(MySet set2) { set<Stu> temp; set<Stu>::iterator i=s.begin(); for(;i!=s.end();i++) if(set2.s.find(*i)==set2.s.end()) temp.insert(*i); disp(temp); } void disp(set<Stu> s) { set<Stu>::iterator i=s.begin(); for(;i!=s.end();i++) (*i).show();//*i是const } }; int main() { Stu s1[]={Stu("001","zhang"),Stu("002","lisi"),Stu("003","qian")}; Stu s2[]={Stu("001","zhang"),Stu("004","qin"),Stu("003","qian")}; MySet set1(s1,s1+3),set2(s2,s2+3); //∪ set1.bing(set2); cout<<endl; //∩ set1.jiao(set2); cout<<endl; //- |
set1.cha(set2); } 实验结果(附数据和图表): 实验结果分析及结论: 实验成功,成功地用set容器完成了两个集合的交、并、差运算。 利用find函数和insert函数遍历容器,完成实验要求。 实验心得体会和建议: 关联性容器set:set(不允许重复)、multiset(允许重复)——默认小到大,双向迭代器(迭代器不能加减比较),底层是红黑树——二叉排序树。 关联性容器概述: 关联性容器是C++ STL中的一类数据结构,其中的元素是按照一定的规则自动排序的。set和multiset是两个常见的关联性容器,它们都基于红黑树实现。 set和multiset的区别: 主要区别在于是否允许重复元素。set不允许容器中有相同的元素,而multiset可以包含重复元素。 默认排序规则: 这两个容器默认按照元素的小到大顺序进行排序。如果需要按照其他规则排序,可以通过提供自定义的比较函数来实现。 双向迭代器: 关联性容器提供双向迭代器,即可以前进也可以后退。但是,迭代器之间不能进行简单的加减操作,因为红黑树的结构并不保证元素的顺序和在线性结构中的位置一一对应。 底层实现: set和multiset的底层实现是红黑树,这是一种自平衡的二叉搜索树。红黑树的特性确保了在插入、删除等操作后树的高度保持相对平衡,从而保证了较高的检索效率。
|
实验评价及结论: 实验指导老师签字: 年 月 日 |
C++STL实验之set容器的应用
最新推荐文章于 2024-06-14 14:40:57 发布