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

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

C++ STL Set ( Conjunto )

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

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

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

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

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

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

语法

Construtor padrão

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开始

Construtor de cópia

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开始

Construtor de Lista Inicial

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:一个分配器对象,用于此容器的所有内存分配。

primeiro: O primeiro iterador a ser introduzido no intervalo.

first: O último iterador a ser introduzido no intervalo.

x: Outro objeto do mesmo tipo de conjunto.

il: Um objeto de lista de inicialização, a partir do qual serão copiados os elementos.

Retorno

Os construtores nunca retornam nenhum valor.

Complexidade

Para o construtor vazio e o construtor de movimento, a complexidade será constante.

Para todos os outros casos, se os elementos já estiverem ordenados, a complexidade da distância entre os iteradores será linear.

Validade do iterador

Se os elementos do contêiner de conjunto set forem movidos no construtor de movimento, todos os ponteiros, iteradores e referências relacionados a x serão inválidos.

Concorrência de dados

Acesso a todos os elementos copiados.

Segurança de exceção

Se houver exceção, não terá nenhum efeito.

Exemplo1

Vamos ver um exemplo simples do construtor padrão:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   // Construtor padrão
   set<char> s;
  
   int size = s.size(); 
   cout << "Tamanho do conjunto s = " << size;
   return 0;
}

Saída:

Tamanho do conjunto s = 0

No exemplo acima, s é um conjunto vazio, portanto o tamanho é 0.

Exemplo2

Vamos ver um exemplo simples de construtor de faixa:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   int evens[] = {2,4,6,8,10};
  
   // Construtor de faixa
   set<int> myset (evens, evens+5);  
   cout << "Tamanho do contêiner de conjunto myset: " << myset.size();
   return 0;
}

Saída:

Tamanho do contêiner de conjunto myset: 5

No exemplo acima, o conjunto set myset é composto pelos elementos evens.

Exemplo3

Vamos ver um exemplo simples de construtor de cópia:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   //Construtor padrão
   std::set<int> s1;
   s1.insert(5);
   s1.insert(10);
   cout << "Contêiner de conjunto s1Tamanho: : " << s1.size();
  
   // Construtor de cópia
   set<int> s2(s1);
   cout << "\nNovo contêiner de conjunto s2Tamanho: : " << s2.size();
   return 0;
}

Saída:

Contêiner de conjunto s1Tamanho: : " << s 2
Novo contêiner de conjunto s2Tamanho: : " << s 2

No exemplo acima, s2É s1Cópia de cópia do conjunto.

Exemplo4

Vamos ver um exemplo simples de construtor de movimento:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   // Construtor padrão
   set<char> s1;
   s1.insert('x');
   s1.insert('y');
   cout << "Contêiner de conjunto s1Tamanho: : " << s1.size();
   // Construtor de movimento
   set<char> s2(move(s1))();
   cout << "\nNovo contêiner de conjunto s2Tamanho: : " << s2.size();
   return 0;
}

Saída:

Contêiner de conjunto s1Tamanho: : " << s 2
Novo contêiner de conjunto s2Tamanho: : " << s 2

No exemplo acima, s1Seu conteúdo é movido para s2 set.

Exemplo5

Vamos ver um exemplo simples de função construtora com inicialização de lista:

#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
   // Construtor de Lista Inicial
   set<string> fruit {
      "orange", "apple", "mango", "peach", "grape"
   };
   cout << "O tamanho do fruit dentro do container é: " << fruit.size();
   return 0;
}

Saída:

O tamanho do fruit dentro do container é: 5

O exemplo acima cria um set de frutas com string como chave e inicializa com initializer_list.

C++ STL Set ( Conjunto )