输出结果为:
linuxy@linuxy:~/STLset$ g++ -o main main.cpp
linuxy@linuxy:~/STLset$ ./main
1 2 3
linuxy@linuxy:~/STLset$
### 2.3 常用方法
size() : 返回容器元素个数
clear() : 清空容器元素
empty() : 判断容器是否为空,空返回 true,否则,返回false
begin() : 返回指向第一个元素的迭代器
end() : 返回指向最后一个元素的迭代器
rbegin() : 返回指向最后一个元素的反向迭代器
rend() : 返回指向第一个元素的反向迭代器
lower_bound() : 返回指向等于或大于指定键值元素的迭代器
upper_bound() : 返回指向大于指定键值元素的迭代器
erase (position) : 删除迭代器 position 指向的元素
erase (first, last) : 删除 [first, last) 区间的元素
insert(val) : 插入元素 val
find (val) : 查找元素 val,如果存在返回其迭代器

## 三、set 方法实例演示
### 3.1 size()、clear()、empty() 方法
函数原型如下所示:
size_type size() const noexcept; // 返回容器元素个数
void clear() noexcept; // 清空容器
bool empty() const noexcept; // 判断容器是否为空,空返回 true,否则,返回false
下面来看一个例子:
#include
#include // set 容器头文件
using namespace std; // 没有这句,则需要使用 std::set
int main() {
sett1; //定义 set 对象 t1
cout<<"t1.empty() = "<<t1.empty()<<endl; // 1
cout<<"t1.size() = "<<t1.size()<<endl; // 0
for(int i = 1; i <= 6; ++i) { // 插入 1 2 3 4 5 6
t1.insert(i);
}
cout<<"-------------------------------"<<endl; // 分割线
cout<<"t1.empty() = "<<t1.empty()<<endl; // 0
cout<<"t1.size() = "<<t1.size()<<endl; // 6
cout<<"-------------------------------"<<endl;
t1.clear(); // 清空元素
cout<<"t1.empty() = "<<t1.empty()<<endl; // 1
cout<<"t1.size() = "<<t1.size()<<endl; // 0
return 0;
}
输出结果为:
linuxy@linuxy:~/STLset$ g++ -o main main.cpp
linuxy@linuxy:~/STLset$ ./main
t1.empty() = 1
t1.size() = 0
t1.empty() = 0
t1.size() = 6
t1.empty() = 1
t1.size() = 0
linuxy@linuxy:~/STLset$
### 3.2 begin()、end() 方法
函数原型如下所示:
iterator begin() noexcept; // 返回指向第一个元素的迭代器
iterator end() noexcept; // 返回指向最后一个元素的迭代器
下面来看一个例子:
#include
#include // set 容器头文件
using namespace std; // 没有这句,则需要使用 std::set
int main() {
sett1; //定义 set 对象 t1
for(int i = 1; i <= 6; ++i) { // 插入 1 2 3 4 5 6
t1.insert(i);
}
set<int>::iterator iter; // 迭代器
for(iter = t1.begin(); iter != t1.end(); ++iter) { // 输出所有元素
cout<<*iter<<" ";
}
cout<<endl;
//输出为:1 2 3 4 5 6
return 0;
}
输出结果为:
linuxy@linuxy:~/STLset$ g++ -o main main.cpp
linuxy@linuxy:~/STLset$ ./main
1 2 3 4 5 6
linuxy@linuxy:~/STLset$
### 3.3 rbegin()、rend() 方法
函数原型如下所示:
reverse_iterator rbegin() noexcept; // 返回指向最后一个元素的反向迭代器
reverse_iterator rend() noexcept; // 返回指向第一个元素的反向迭代器
下面来看一个例子:
#include
#include // set 容器头文件
using namespace std; // 没有这句,则需要使用 std::set
int main() {
sett1; //定义 set 对象 t1
for(int i = 1; i <= 6; ++i) { // 插入 1 2 3 4 5 6
t1.insert(i);
}
set<int>::reverse_iterator riter; // 使用反向迭代器
for(riter = t1.rbegin(); riter != t1.rend(); ++riter) { // 输出所有元素
cout<<*riter<<" ";
}
cout<<endl;
//输出为:6 5 4 3 2 1
return 0;
}
输出结果为:
linuxy@linuxy:~/STLset$ g++ -o main main.cpp
linuxy@linuxy:~/STLset$ ./main
6 5 4 3 2 1
linuxy@linuxy:~/STLset$
**注意:**使用反向 迭代器。
### 3.4 lower\_bound()、upper\_bound() 方法
函数原型如下所示:
iterator lower_bound (const value_type& val); // 返回指向等于或大于指定键值元素的迭代器
iterator upper_bound (const value_type& val); // 返回指向大于指定键值元素的迭代器
下面来看一个简单的例子:
#include
#include // set 容器头文件
using namespace std; // 没有这句,则需要使用 std::set
int main() {
sett1; //定义 set 对象 t1
for(int i = 1; i <= 6; ++i) { // 插入 1 2 3 4 5 6
t1.insert(i);
}
set<int>::iterator iter = t1.lower_bound(3); // 返回大于等于 3 的第一个元素的迭代器
cout<<*iter<<endl;
iter = t1.upper_bound(3); // 返回大于 3 的第一个元素的迭代器
cout<<*iter<<endl;
return 0;
}
输出结果为:
linuxy@linuxy:~/STLset$ g++ -o main main.cpp
linuxy@linuxy:~/STLset$ ./main
3
4
linuxy@linuxy:~/STLset$
可以看到,lower\_bound 返回 3,而 upper\_bound 返回 4。
### 3.5 erase 方法
#### 3.5.1 删除指定元素
函数原型如下所示:
iterator erase (const_iterator position); // 删除迭代器 position 指向的元素
下面来看一个例子:
#include
#include // set 容器头文件
using namespace std; // 如果没有这句,则需要使用 std::set
int main() {
sett1; // 定义 set 对象 t1
for(int i = 1; i <= 6; ++i) { // 插入 1 2 3 4 5 6
t1.insert(i);
}
set<int>::iterator iter = t1.begin(); // 迭代器
++iter;
t1.erase(iter); // 删除元素
for(iter = t1.begin(); iter != t1.end(); ++iter) { // 依次输出元素
cout<<*iter<<" ";
}
cout<<endl;
// 输出为: 1 3 4 5 6
}
输出结果为:
linuxy@linuxy:~/STLset$ g++ -o main main.cpp
linuxy@linuxy:~/STLset$ ./main
1 3 4 5 6
linuxy@linuxy:~/STLset$
#### 3.5.2 删去区间[first, last)的元素
函数原型如下所示:
iterator erase (const_iterator first, const_iterator last); // 删除[first, last)区间的元素
下面来看一个例子:
#include
#include // set 容器头文件
using namespace std; // 如果没有这句,则需要使用 std::set
int main() {
sett1; // 定义 set 对象 t1
for(int i = 1; i <= 6; ++i) { // 插入 1 2 3 4 5 6
t1.insert(i);
}
set<int>::iterator iter2 = t1.begin(), iter1; // 迭代器
++iter2;
iter1 = iter2;
++iter2;
++iter2;
t1.erase(iter1, iter2); // 删除 [iter1, iter2) 区间的元素
for(iter1 = t1.begin(); iter1 != t1.end(); ++iter1) { // 依次输出元素
cout<<*iter1<<" ";
}
cout<<endl;
// 输出为: 1 4 5 6
}
输出结果为:
linuxy@linuxy:~/STLset$ g++ -o main main.cpp
linuxy@linuxy:~/STLset$ ./main
1 4 5 6
linuxy@linuxy:~/STLset$
### 3.6 insert 方法
函数原型如下所示:
pair<iterator,bool> insert (const value_type& val);
下面来看一个例子:
#include
#include // set 容器头文件
using namespace std; // 没有这句,则需要使用 std::set
int main() {
sett1; //定义 set 对象 t1
for(int i = 1; i <= 6; ++i) { // 插入 1 2 3 4 5 6
t1.insert(i);
}
set<int>::iterator iter; // 迭代器
for(iter = t1.begin(); iter != t1.end(); ++iter) { // 依次输出插入的元素
cout<<*iter<<" ";
}
cout<<endl;
// 输出为: 1 2 3 4 5 6
}
输出结果为:
linuxy@linuxy:~/STLset$ g++ -o main main.cpp
linuxy@linuxy:~/STLset$ ./main
1 2 3 4 5 6
linuxy@linuxy:~/STLset$
### 3.7 find 方法
函数原型如下所示:
iterator find (const value_type& val); // 返回指向 val 元素的迭代器
下面来看一个例子:
#include
#include // set 容器头文件
using namespace std; // 如果没有这句,则需要使用 std::set
int main() {
sett1; // 定义 set 对象 t1
for(int i = 1; i <= 6; ++i) { // 插入 1 2 3 4 5 6
t1.insert(i);
}
set<int>::iterator iter; // 迭代器
iter = t1.find(5); // 查找元素 5
if(iter != t1.end()) {
cout<<*iter<<endl;
}
// 输出为:5
}
输出结果为:
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**