📜  C++ STL-set 构造函数(1)

📅  最后修改于: 2023-12-03 15:29:50.553000             🧑  作者: Mango

C++ STL-set 构造函数介绍

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;
}

以上示例代码展示了默认构造函数、范围构造函数、复制构造函数和移动构造函数的用法,输出结果如注释所示。