📅  最后修改于: 2023-12-03 15:29:50.553000             🧑  作者: Mango
STL中的集合(set)是一种基于红黑树实现的关联容器,可以进行快速的查找、插入和删除操作。在使用set时,需要通过构造函数来创建集合对象,本文将介绍C++ STL-set的构造函数及其对应的代码片段。
set类的构造函数具有多种形式,以满足用户不同的需求。下面将介绍常用的几种构造函数类型,包括默认构造函数、范围构造函数、复制构造函数和移动构造函数。
默认构造函数创建一个空的集合,该集合不包含任何元素。它不接收任何参数,定义如下:
set<T> s;
其中,T表示集合元素的类型。使用默认构造函数创建的set对象可以通过insert()函数插入元素。
范围构造函数可以通过一个指向数组开头和结尾的指针、一个迭代器范围或一个初始化列表来创建一个集合。它的定义如下:
template<class InputIterator>
set(InputIterator first, InputIterator last, const Compare& comp = Compare());
set(initializer_list<value_type> il, const Compare& comp = Compare());
其中,InputIterator表示迭代器类型,first和last分别表示指向数组中第一个和最后一个元素的迭代器;initializer_list<value_type>表示初始化列表,value_type表示集合元素类型;comp表示自定义比较规则的函数对象,可以不使用该参数。
复制构造函数创建一个新的集合对象,并将另一个集合对象的所有元素复制到新对象中。它的定义如下:
set(const set& x);
其中,x表示被复制的set对象。
移动构造函数创建一个新的集合对象,并“窃取”另一个集合对象的所有元素。它的定义如下:
set(set&& x);
其中,x表示被移动的set对象。
下面是一些示例代码,展示不同类型的构造函数的使用方法:
#include <iostream>
#include <set>
using namespace std;
int main()
{
// 默认构造函数创建空集合
set<int> s1; // 空集合
// 范围构造函数
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
set<int> s2(arr, arr + 10); // 从数组中创建集合
set<int> s3(s2.begin(), s2.end()); // 从迭代器范围中创建集合
set<int> s4{7, 2, 8, 4, 8, 0, 7}; // 从初始化列表中创建集合
// 复制构造函数
set<int> s5(s4);
// 移动构造函数
set<int> s6(move(s5));
// 输出集合元素
cout << "s2: ";
for(auto i : s2) cout << i << " "; // 输出:1 2 3 4 5 6 9
cout << endl;
cout << "s3: ";
for(auto i : s3) cout << i << " "; // 输出:1 2 3 4 5 6 9
cout << endl;
cout << "s4: ";
for(auto i : s4) cout << i << " "; // 输出:0 2 4 7 8
cout << endl;
cout << "s5: ";
for(auto i : s5) cout << i << " "; // 输出:0 2 4 7 8
cout << endl;
cout << "s6: ";
for(auto i : s6) cout << i << " "; // 输出:0 2 4 7 8
cout << endl;
return 0;
}
以上示例代码展示了默认构造函数、范围构造函数、复制构造函数和移动构造函数的用法,输出结果如注释所示。