一、set 集合容器遍历
1、使用迭代器进行正向迭代与反向迭代
std::set 集合容器 提供了 begin、end、rbegin 和 rend 这几个成员函数,用于 获取 迭代访问链表中的元素 的 迭代器 , 函数原型如下 :
- 获取首元素迭代器 : 返回一个迭代器 , 指向集合的第一个元素 ;
iterator begin();
const_iterator begin() const;
- 获取尾元素之后的迭代器 : 返回一个迭代器 , 指向集合的尾部 , 该尾部指的是 超出 尾元素 的位置 , 不是最后一个元素 , 是最后一个元素后面的位置 , 无法获取值 ;
iterator end();
const_iterator end() const;
- 获取指向尾元素的反向迭代器 : 该函数返回一个反向迭代器 , 指向集合容器的最后一个元素 ; 如果集合容器为空 , 则此操作未定义 ; 反向迭代器从集合的尾部向头部移动 ;
- 获取指向首元素之前的反向迭代器 : 返回一个反向迭代器 , 指向集合的 超出头部 ”的位置 , 即第一个元素的前一个位置 ; 该迭代器 它用于与 rbegin 一起实现完整的逆向迭代 ;
reverse_iterator rend();
const_reverse_iterator rend() const;
迭代器的位置如下图所示 :
- 正向迭代示例 :
// 遍历 set 集合容器 , 正向迭代
for (set<int>::iterator it = se.begin(); it != se.end(); it++)
{
cout << *it << " ";
}
// 回车换行
cout << endl;
- 反向迭代示例 :
// 遍历 set 集合容器 , 反向迭代
for (set<int>::reverse_iterator rit = se.rbegin(); rit != se.rend(); rit++)
{
cout << *rit << " ";
}
// 回车换行
cout << endl;
2、代码示例
代码示例 :
#include "iostream"
using namespace std;
#include "set"
#include "vector"
int main() {
// set 集合容器
// 初始化列表中的顺序会自动排序
set<int> se{9, 5, 7};
// 遍历 set 集合容器 , 正向迭代
for (set<int>::iterator it = se.begin(); it != se.end(); it++)
{
cout << *it << " ";
}
// 回车换行
cout << endl;
// 遍历 set 集合容器 , 反向迭代
for (set<int>::reverse_iterator rit = se.rbegin(); rit != se.rend(); rit++)
{
cout << *rit << " ";
}
// 回车换行
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
5 7 9 9 7 5 请按任意键继续. . .
二、set 集合容器插入元素
1、插入单个元素 - insert 函数
在 C++ 的 标准模板库 ( STL , Standared Template Library ) 中 , set 容器是一个有序的集合 , 其中包含唯一的元素 ;
调用 set 容器的 insert 函数用于向集合中插入元素 , 插入元素时会自动排序 ;
set#insert 函数原型 :
void insert (const value_type& val);
- val 参数 : value_type 是元素类型 , val 是要插入的元素引用 ;
- 使用示例 :
// set 集合容器
// 初始化列表中的顺序会自动排序
set<int> se{9, 5, 7};
// 向容器中插入元素
se.insert(3);
代码示例 :
#include "iostream"
using namespace std;
#include "set"
int main() {
// set 集合容器
// 初始化列表中的顺序会自动排序
set<int> se{9, 5, 7};
// 向容器中插入元素
se.insert(3);
se.insert(1);
se.insert(2);
// 遍历 set 集合容器
for (set<int>::iterator it = se.begin(); it != se.end(); it++)
{
cout << *it << " ";
}
// 回车换行
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
1 2 3 5 7 9 请按任意键继续. . .
2、插入多个元素 - insert 函数
调用 set 集合容器的 insert 函数 , 传入一个初始化列表 , 如 {3, 1, 2}
, 可以将多个元素插入到 set 集合容器中 ;
函数原型如下 : 使用初始化列表来插入多个元素
void insert (initializer_list<value_type> init);
插入多个元素时 , 会将多个元素与原有元素进行排序 ;
使用示例 :
// set 集合容器
// 初始化列表中的顺序会自动排序
set<int> se{9, 5, 7};
// 向容器中插入若干元素
se.insert({3, 1, 2});
代码示例 :
#include "iostream"
using namespace std;
#include "set"
#include "vector"
int main() {
// set 集合容器
// 初始化列表中的顺序会自动排序
set<int> se{9, 5, 7};
// 向容器中插入若干元素
se.insert({3, 1, 2});
// 遍历 set 集合容器
for (set<int>::iterator it = se.begin(); it != se.end(); it++)
{
cout << *it << " ";
}
// 回车换行
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
1 2 3 5 7 9 请按任意键继续. . .
3、插入指定迭代器范围的元素 - insert 函数
调用 set 容器的 insert 函数 , 传入 2 个迭代器对象 , 可以将另外一个容器指定范围的元素插入到 set 集合容器中 , 插入的多个元素会在 set 容器中自动排序 ;
被插入元素的 另外的集合 , 可以不是 set 集合 , 可以是 vector , deque 等容器 ;
set#insert 插入多个元素 函数原型 :
void insert (InputIt first, InputIt last);
- 使用示例 :
// set 集合容器
// 初始化列表中的顺序会自动排序
set<int> se{9, 5, 7};
// 要插入的容器元素
vector<int> vec{ 3, 1, 2 };
// 向容器中插入若干元素
se.insert(vec.begin(), vec.end());
代码示例 :
#include "iostream"
using namespace std;
#include "set"
#include "vector"
int main() {
// set 集合容器
// 初始化列表中的顺序会自动排序
set<int> se{9, 5, 7};
// 要插入的容器元素
vector<int> vec{ 3, 1, 2 };
// 向容器中插入若干元素
se.insert(vec.begin(), vec.end());
// 遍历 set 集合容器
for (set<int>::iterator it = se.begin(); it != se.end(); it++)
{
cout << *it << " ";
}
// 回车换行
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
1 2 3 5 7 9 请按任意键继续. . .