English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Tutoriel de base

C++ Contrôle de flux

C++ Fonctions

C++ Tableaux & chaînes

C++ Structures de données

C++ Classes & objets

C++ Pointeurs

C++ Héritage

C++ STL 教程

C++ 参考手册

C++ set constructor(构造函数) 使用方法及示例

C++ Set (ensemble) STL

set构造函数有以下五种用途:

  1. 默认构造函数:用于构造具有零个元素的空set容器。

  2. 范围构造函数:用于构造内容范围为[first,last)的容器。

  3. 复制构造函数:用于构造带有现有容器元素副本的集合。

  4. move构造函数:用于使用move语义与其他元素一起构造容器。

  5. 初始化程序列表构造函数:用于构造带有初始化程序列表内容的集合。

语法

Constructeur par défaut

explicit set (const key_compare& comp = key_compare(),
              const allocator_type& alloc = allocator_type());	//到C++ 11
explicit set (const key_compare& comp = key_compare(),
              const allocator_type& alloc = allocator_type());
explicit set (const allocator_type& alloc);			//从C ++ 11开始

范围构造器

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

Constructeur de copie

set (const set& x);						//到C++ 11
set (const set& x);
set (const set& x, const allocator_type& alloc);			//从C ++ 11开始

移动构造函数

set (set&& x);
set (set&& x, const allocator_type& alloc);			//从C ++ 11开始

Constructeur de liste d'initialisation

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

参数

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

alloc:一个分配器对象,用于此容器的所有内存分配。

first:L'itérateur de la première position dans la plage.

last:L'itérateur de la dernière position dans la plage.

x:Un autre objet set du même type.

il:Un objet d'initiateur de liste, à partir duquel les éléments seront copiés.

Retour de valeur

Les constructeurs ne retournent jamais de valeur.

Complexité

Pour les constructeurs vides et de déplacement, la complexité sera constante.

Pour toutes les autres situations, si les éléments sont déjà triés, la complexité de la distance entre les itérateurs sera linéaire.

Validité des itérateurs

Si les éléments du conteneur set sont déplacés dans le constructeur de déplacement, tous les pointeurs, itérateurs et références associés à x deviennent invalides.

Concurrence des données

Accéder à tous les éléments copiés.

Sécurité des exceptions

En cas d'exception, il n'a aucun effet.

Exemple1

Voyons un exemple simple de constructeur par défaut :

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   // Constructeur par défaut
   set<char> s;
  
   int size = s.size(); 
   cout << "Taille de l'ensemble s = " << size;
   return 0;
}

Sortie :

La taille de l'ensemble s = 0

Dans l'exemple précédent, s est un ensemble vide, donc la taille est de 0.

Exemple2

Voyons un exemple simple de constructeur de plage :

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   int evens[] = {2,4,6,8,10};
  
   // Constructeur de plage
   set<int> myset (evens, evens+5);  
   cout << "Taille du conteneur de collection myset est : " << myset.size();
   return 0;
}

Sortie :

La taille du conteneur de collection myset est: 5

Dans l'exemple précédent, set myset est composé des éléments evens.

Exemple3

Voyons un exemple simple de constructeur de copie :

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   //Constructeur par défaut
   std::set<int> s1;
   s1.insert(5);
   s1.insert(10);
   cout << "Conteneur de collection s1taille est de : " << s1.size();
  
   // Constructeur de copie
   set<int> s2(s1);
   cout << "\nNouveau conteneur de collection s2taille est de : " << s2.size();
   return 0;
}

Sortie :

Le conteneur de collection s1taille est de : 2
Le conteneur de collection de nouvelles s2taille est de : 2

Dans l'exemple précédent, s2est s1une copie de la collection.

Exemple4

Voyons un exemple simple de constructeur de déplacement :

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   // Constructeur par défaut
   set<char> s1;
   s1.insert('x');
   s1.insert('y');
   cout << "Conteneur de collection s1taille est de : " << s1.size();
   // Constructeur de déplacement
   set<char> s2(move(s1)) ;
   cout << "\nNouveau conteneur de collection s2taille est de : " << s2.size();
   return 0;
}

Sortie :

Le conteneur de collection s1taille est de : 2
Le conteneur de collection de nouvelles s2taille est de : 2

Dans l'exemple précédent, s1son contenu est déplacé vers s2 set.

Exemple5

Laissez-nous voir un exemple simple de constructeur par liste d'initialisation :

#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
   // Constructeur de liste d'initialisation
   set<string> fruit {
      "orange", "apple", "mango", "peach", "grape"
   };
   cout << "La taille de fruit dans le conteneur est : " << fruit.size();
   return 0;
}

Sortie :

La taille de fruit dans le conteneur est : 5

L'exemple suivant crée un set de fruits avec des chaînes de caractères en tant que clé et l'initialise avec initializer_list.

C++ Set (ensemble) STL