STL——容器(Set & multiset)的默认构造 & 带参构造 & 对象的拷贝构造与赋值
1. 默认构造
set<int> setInt; //一个存放int的set容器。
set<float> setFloat; //一个存放float的set容器。
set<string> setString; //一个存放string的set容器。
multiset<int> mulsetInt; //一个存放int的multi set容器。
multiset<float> multisetFloat; //一个存放float的multi set容器。
multiset<string> multisetString; //一个存放string的multi set容器。
示例代码:
1 #include <iostream>
2 #include <set>
3
4 using namespace std;
5
6 int main()
7 {
8 set<int> setInt; //一个存放 int 的 set 容器。
9 for (int i = 0; i < 5; i++)
10 {
11 setInt.insert(100 - i);
12 }
13 setInt.insert(100);
14 for (set<int>::iterator it = setInt.begin(); it != setInt.end(); it++)
15 {
16 cout << *it << " ";
17 }
18 cout << endl;
19
20 set<float> setFloat; //一个存放 float 的 set 容器。
21 for (int i = 0; i < 5; i++)
22 {
23 setFloat.insert((100 - i) * 0.5);
24 }
25 setFloat.insert(50);
26 for (set<float>::iterator itf = setFloat.begin(); itf != setFloat.end(); itf++)
27 {
28 cout << *itf << " ";
29 }
30 cout << endl;
31
32 set<string> setString; //一个存放 string 的 set 容器。
33 setString.insert("a");
34 setString.insert("a");
35 setString.insert("a");
36 for (set<string>::iterator its = setString.begin(); its != setString.end(); its++)
37 {
38 cout << *its << " ";
39 }
40 cout << endl;
41
42
43 /***************************** multiset ********************************/
44 cout << "*********** multiset *********" << endl;
45 multiset<int> mulsetInt; //一个存放 int 的 multiset 容器。
46 for (int i = 0; i < 5; i++)
47 {
48 mulsetInt.insert(100 - i);
49 }
50 mulsetInt.insert(100);
51 for (set<int>::iterator it = mulsetInt.begin(); it != mulsetInt.end(); it++)
52 {
53 cout << *it << " ";
54 }
55 cout << endl;
56
57 multiset<float> multisetFloat; //一个存放 float 的 multiset 容器。
58 for (int i = 0; i < 5; i++)
59 {
60 multisetFloat.insert((100 - i) * 0.5);
61 }
62 multisetFloat.insert(50);
63 for (set<float>::iterator itf = multisetFloat.begin(); itf != multisetFloat.end(); itf++)
64 {
65 cout << *itf << " ";
66 }
67 cout << endl;
68
69 multiset<string> multisetString; //一个存放 string 的 multiset 容器。
70 multisetString.insert("a");
71 multisetString.insert("a");
72 multisetString.insert("a");
73 for (set<string>::iterator its = multisetString.begin(); its != multisetString.end(); its++)
74 {
75 cout << *its << " ";
76 }
77 cout << endl;
78
79 return 0;
80 }
打印结果:

2. 带参构造
set(beg,end); //将[beg, end)区间中的元素拷贝给本身。
multiset(beg,end); //将[beg, end)区间中的元素拷贝给本身。
1 #include <iostream>
2 #include <set>
3
4 using namespace std;
5
6 int main()
7 {
8 set<int> setInt;
9 for (int i = 0; i < 5; i++)
10 {
11 setInt.insert(100 - i);
12 }
13
14 set<int> setInt1(setInt.begin(), setInt.end());
15 for (set<int>::iterator it = setInt1.begin(); it != setInt1.end(); it++)
16 {
17 cout << *it << " ";
18 }
19 cout << endl;
20
21 return 0;
22 }
打印结果:

set(const set &s); //拷贝构造函数。
multiset(const multiset &s); //拷贝构造函数。
1 #include <iostream>
2 #include <set>
3
4 using namespace std;
5
6 int main()
7 {
8 set<int> setInt;
9 for (int i = 0; i < 5; i++)
10 {
11 setInt.insert(100 - i);
12 }
13
14 set<int> setInt1(setInt);
15 for (set<int>::iterator it = setInt1.begin(); it != setInt1.end(); it++)
16 {
17 cout << *it << " ";
18 }
19 cout << endl;
20
21 return 0;
22 }
打印结果

3. 拷贝构造与赋值
set(const set &st); //拷贝构造函数
set& operator=(const set &st); //重载等号操作符,这些都差不多,不过多解释了
1 #include <iostream>
2 #include <set>
3
4 using namespace std;
5
6 int main()
7 {
8 set<int> setInt;
9 for (int i = 0; i < 5; i++)
10 {
11 setInt.insert(100 - i);
12 }
13
14 // set<int> setInt1(setInt); //拷贝构造
15 set<int> setInt1 = setInt; //赋值构造
16 for (set<int>::iterator it = setInt1.begin(); it != setInt1.end(); it++)
17 {
18 cout << *it << " ";
19 }
20 cout << endl;
21
22 return 0;
23 }
set.swap(st); //交换两个集合容器
1 #include <iostream>
2 #include <set>
3
4 using namespace std;
5
6 int main()
7 {
8 set<int> setInt1;
9 for (int i = 0; i < 5; i++)
10 {
11 setInt1.insert(i);
12 }
13 set<int> setInt2;
14 for (int i = 0; i < 5; i++)
15 {
16 setInt2.insert(i);
17 }
18 setInt2.insert(666);
19
20 cout << "遍历setInt1" << endl;
21 for (set<int>::iterator it = setInt1.begin(); it != setInt1.end(); it++)
22 {
23 cout << *it << " ";
24 }
25 cout << endl;
26 cout << "遍历setInt2" << endl;
27 for (set<int>::iterator it = setInt2.begin(); it != setInt2.end(); it++)
28 {
29 cout << *it << " ";
30 }
31 cout << endl;
32
33 cout << endl << "使用 swap 交换两个容器" << endl;
34
35 setInt1.swap(setInt2);
36 cout << "交换后遍历 setInt1" << endl;
37 for (set<int>::iterator it = setInt1.begin(); it != setInt1.end(); it++)
38 {
39 cout << *it << " ";
40 }
41 cout << endl;
42
43 cout << "交换后遍历 setInt2" << endl;
44 for (set<int>::iterator it = setInt2.begin(); it != setInt2.end(); it++)
45 {
46 cout << *it << " ";
47 }
48 cout << endl;
49
50 return 0;
51 }
打印结果:

=====================================================================================================================
STL——容器(Set & multiset)的默认构造 & 带参构造 & 对象的拷贝构造与赋值的更多相关文章
- STL—— 容器(vector)的内存分配,声明时的普通构造&带参构造
vector 的几种带参构造 & 初始化与内存分配: 1. 普通的带参构造: vector 的相关对象可以在声明时通过 vector 的带参构造函数进行内存分配,如下: 1 #include ...
- STL Set和multiset 容器
STL Set和multiset 容器 set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列. 元素插入过程是按排序规则插入,所以不能指定插入位 ...
- STL - set和multiset
set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. set采用红黑树变体的数据结构实现, ...
- 【转】c++中Vector等STL容器的自定义排序
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1.Copy构造函数 2.赋值=操作符 3.能够销毁对象的析构函数 另外: 1. ...
- C++ 构造函数、析构函数、拷贝构造、赋值运算符
之所以要把它们放在一起,是因为在使用C/C++类语言的时候,很容易混淆这几个概念(对Java来说完全没有这样的问题,表示Javaor完全没有压力). 先建立一个测试类(包含.h和.cpp) //~ P ...
- Android(java)学习笔记107-1:通过反射获得带参构造方法并且使用
反射获得带参构造方法并且使用: 1. 获取字节码文件对象 Class c = Class.forName("cn.itcast_01.Person"); 2.获取带参构 ...
- Android(java)学习笔记48:通过反射获得带参构造方法并且使用
1. 反射获得带参构造方法并且使用: (1)获取字节码文件对象 Class c = Class.forName("cn.itcast_01.Person"); (2)获 ...
- STL——容器(Set & multiset)编译器提供的16种构造(挖个坑)
Set & multiset 在vs2019编译器中提供了16种构造方法 1.默认的无参构造 2.比较容器内容,key_comp()函数返回一个比较key的函数. 3.使用迭代器的区间拷贝,拷 ...
- STL容器(Stack, Queue, List, Vector, Deque, Priority_Queue, Map, Pair, Set, Multiset, Multimap)
一.Stack(栈) 这个没啥好说的,就是后进先出的一个容器. 基本操作有: stack<int>q; q.push(); //入栈 q.pop(); //出栈 q.top(); //返回 ...
随机推荐
- 关于JPA一对一,一对多(多对一),多对多的详解
一.@OneToOne关系映射 JPA使用@OneToOne来标注一对一的关系. 实体 People :用户. 实体 Address:家庭住址. People 和 Address 是一对一的关系. 这 ...
- linx mysql安装
文章引用:https://www.cnblogs.com/shizhongyang/p/8464876.html 只做了少量修改,感谢博主 注:未防止混淆,这里都用绝对路径执行命令 除了文件内容中的# ...
- JWT 实战
上一篇我们讲解了 JWT 的基本原理和结构 你了解JWT吗?,接下来我们具体实战一下! 1. 引入依赖 <!--引入jwt--> <dependency> <groupI ...
- php 判断网站是http还是https
//判断是http还是https $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (i ...
- 通过PHPExcel将Excel表文件中数据导入数据库
1 <?php 2 header("Content-Type:text/html;charset=utf-8"); 3 include_once 'PHPExcel.php' ...
- 日常踩坑-------新手使用idea
mybatis在idea的maven项目中的坑 今天遇到mybatis的报错,搞了好久才搞懂,在网上找了好久的相似案例,也没有搞定,先来看下网上常见的解决办法吧,相信也能解决大部分人的报错. 1.ma ...
- pip更新报错问题
pip更新错误如下: WARNING: You are using pip version 20.1.1; however, version 20.2 is available. You should ...
- eslint报错: Unexpected any value in conditional. An explicit comparison or type cast is required
原代码: record.modifiedTime? 修改后代码:typeof record.modifiedTime !== 'undefined' ? (isAddType === true ? ...
- (原创)用.NET Core实现一个在线客服系统(上篇)
前言 没有视频的介绍显得尤为空白仓促.所以,如果你不赶时间,看看视频先 → → 戳我看视频 ← ← 在线演示访客端:http://role.fuyue.xyz/visitor/index客服端:ht ...
- 这份SpringMVC执行原理笔记,建议做java开发的好好看看,总结的很详细!
什么是SpringMVC? Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供的web模块,包含了开发Web 应用程 ...