C++ Set 构造函数

C++ Set 构造函数

以下是set构造函数的五种用法:

  1. 默认构造函数: 用于构造一个空的set容器,其中没有元素。
  2. 范围构造函数: 用于使用范围[first, last)的内容构造一个容器。
  3. 复制构造函数: 用于构造一个包含现有容器元素副本的set。
  4. 移动构造函数: 使用移动语义构造容器,其中包含其他容器的元素。
  5. 初始化列表构造函数: 使用初始化列表的内容构造set。

语法

默认构造函数

explicit set (const key_compare& comp = key_compare(),
              const allocator_type& alloc = allocator_type());  //until C++ 11

explicit set (const key_compare& comp = key_compare(),
              const allocator_type& alloc = allocator_type());
explicit set (const allocator_type& alloc);         //since C++ 11  

范围构造函数

template <class InputIterator>
  set (InputIterator first, InputIterator last,
       const key_compare& comp = key_compare(),
       const allocator_type& alloc = allocator_type());     //until C++ 11

template <class InputIterator>
  set (InputIterator first, InputIterator last,
       const key_compare& comp = key_compare(),
       const allocator_type& = allocator_type());           //since C++ 11

复制构造函数

set (const set& x);                     //until C++ 11

set (const set& x);
set (const set& x, const allocator_type& alloc);            //since C++ 11

移动构造函数

set (set&& x);
set (set&& x, const allocator_type& alloc);         //since C++ 11

初始化列表构造函数

set (initializer_list<value_type> il,
     const key_compare& comp = key_compare(),
     const allocator_type& alloc = allocator_type());       //since C++ 11

参数

comp : 一个比较函数对象,该函数对象接受两个键参数,并在第一个参数在第二个参数之前时返回true,否则返回false。默认情况下,它使用less<key_type>谓词。

alloc : 用于该容器的所有内存分配的分配器对象。

first : 指向范围中第一个位置的输入迭代器。

last : 指向范围中最后一个位置的输入迭代器。

x : 同类型的另一个set对象。

il : 用于复制元素的初始化列表对象。

返回值

构造函数没有返回任何值。

复杂度

对于空构造函数和移动构造函数,复杂度将是常量。

对于所有其他情况,如果元素已经排序,则复杂度将是迭代器之间的距离的线性函数。

迭代器的有效性

如果set容器中的元素在移动构造函数中被移动,则使与x相关的所有指针、迭代器和引用失效。

数据竞争

所有复制的元素都被访问。

异常安全性

如果抛出异常,不会产生任何影响。

示例1

让我们看一个简单的默认构造函数的示例:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   // Default constructor
   set<char> s;

   int size = s.size(); 

   cout << "Size of set s = " << size;
   return 0;
}

输出:

Size of set = 0

在上面的示例中,s是一个空集合,因此大小为0。

示例2

让我们看一个关于range构造函数的简单示例:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   int evens[] = {2,4,6,8,10};

   // Range Constructor
   set<int> myset (evens, evens+5);  

   cout << "Size of set container myset is : " << myset.size();
   return 0;
}

输出:

Size of set container myset is: 5

在上面的示例中,集合myset是用偶数元素构建的。

示例3

让我们看一个简单的拷贝构造函数的示例:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   //Default Constructor
   std::set<int> s1;
   s1.insert(5);
   s1.insert(10);

   cout << "Size of set container s1 is : " << s1.size();

   // Copy constructor
   set<int> s2(s1);
   cout << "\nSize of new set container s2 is : " << s2.size();
   return 0;
}

输出:

Size of set container s1 is : 2
Size of new set container s2 is : 2

在上面的示例中,s2是s1集合的一个副本。

示例4

让我们看一个简单的移动构造函数示例:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   // Default constructor
   set<char> s1;
   s1.insert('x');
   s1.insert('y');

   cout << "Size of set container s1 is : " << s1.size();

   // Move constructor
   set<char> s2(move(s1));
   cout << "\nSize of new set container s2 is : " << s2.size();
   return 0;
}

输出:

Size of set container s1 is : 2
Size of new set container s2 is : 2

在上面的示例中,s1的内容被移动到s2集合中。

示例5

让我们看一个简单的使用初始化列表构造函数的示例:

#include <iostream>
#include <set>
#include <string>

using namespace std;

int main() {
   // Initializer list constructor
   set<string> fruit {
      "orange", "apple", "mango", "peach", "grape"
   };

   cout << "Size of set container fruit is : " << fruit.size();
   return 0;
}

输出:

Size of set container fruit is : 5

上面的示例创建了一个以字符串作为键的集合 fruit,并使用初始化列表进行初始化。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程