【C++】STL 容器 - set 集合容器 ② ( set 集合容器常用 api 简介 | 使用迭代器进行正向迭代与反向迭代 | 集合容器插入元素 | 插入单个元素 | 插入多个元素 )

C/C++
187
0
0
2024-03-03

一、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 请按任意键继续. . .

在这里插入图片描述