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

C++ Tutorial Básico

C++ Controle de Fluxo

C++ Função

C++ Array & String

C++ Estrutura de Dados

C++ Classe & Objeto

C++ Ponteiro

C++ Herança

C++ Tutorial STL

C++ Manual de Referência

C++ Uso e exemplo de set erase()

C++ Set ( Conjunto ) do STL

C ++ set erase()A função é usada para excluir um único elemento ou um intervalo de elementos (de [first, last)) associados a uma chave específica do contêiner set. Portanto, o tamanho será reduzido pela quantidade de elementos removidos.

Sintaxe

void erase(iterator position);                       	  //C++ 11 antes
size_type erase(const value_type& val);    		  //C++ 11 antes
void erase(iterator first, iterator last);  		  //C++ 11 antes
iterator erase(const_iterator position);		  //de C++ 11Início
size_type erase(const value_type& val);		  //de C++ 11Início	
iterator erase(const_iterator first, const_iterator last); //de C++ 11Início

Parâmetros

position: iterador, que aponta para o elemento único a ser removido da coleção.

val: o valor a ser removido da coleção.

first: o início do intervalo a ser removido.

last: o final do intervalo a ser removido.

Retorno

Ele retorna um iterador para o elemento seguinte ao elemento removido ou retorna a quantidade de elementos removidos.

Complexidade

erase(position): constante amortizada.

erase (val): o logaritmo do tamanho do contêiner.

erase(first, last): A distância entre o primeiro e o último é linear.

Validade do iterador

Iteradores, referências e ponteiros para o elemento removido tornam-se inválidos.

Todos os outros iteradores, ponteiros e referências mantêm sua validade.

Conflito de dados

O contêiner foi modificado.

O elemento removido será modificado. Embora seja seguro acessar outros elementos ao mesmo tempo, não é seguro iterar sobre o contêiner.

Segurança de exceção

Esta função não lança exceções.

Se for especificado um intervalo ou posição inválidos, isso causará um comportamento não definido.

Exemplo1

Vamos ver um exemplo simples que remove elementos usando o iterador.

#include <iostream>
#include <set>
using namespace std;
int main () {
    set<int> myset;
    set<int>::iterator it;
    myset = {
        10,20,30
    }
    ;
    cout << "Antes da exclusão dos elementos:\n \n";
    for (it = myset.begin(); it != myset.end(); ++it)
        cout << *it << '\n';
    it = myset.find('b');
    myset.erase (*it);
    // remover por iterador
    cout << "\nApós excluir o elemento: \n";
    for (it = myset.begin(); it != myset.end(); ++it)
        cout << *it << '\n';
    return 0;
}

Saída:

Antes da exclusão dos elementos: 
10
20
30
Após excluir o elemento: 
10
20
30

No exemplo acima, o elemento foi removido usando o iterador.

Exemplo2

Vamos ver um exemplo simples para excluir elementos da coleção usando uma chave específica:

#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  set<int>::iterator it;
  myset = {10, 20, 30, 40};
  
  cout << "Antes da exclusão dos elementos:\n \n";
   for (it = myset.begin(); it != myset.end(); ++it){
     cout << *it << '\n';
   }
  
   myset.erase (30);//remover o valor especificado
  cout << "\nApós a exclusão dos elementos:\n \n";
  for (it = myset.begin(); it != myset.end(); ++it){
      cout << *it << '\n';
  }
    
  return 0;
}

Saída:

Antes da exclusão dos elementos: 
10
20
30
40
Após a exclusão dos elementos: 
10
20
40

No exemplo acima, a função erase (value) usa o valor da coleção30.

Exemplo3

Vamos ver um exemplo simples para excluir elementos dentro de um intervalo especificado:

#include <iostream>
#include <set>
using namespace std;
int main () {
    set<int> myset;
    set<int>::iterator it;
    myset = {
        10, 20, 30
    };
    cout << "Antes da exclusão dos elementos:\n \n";
    cout << "Tamanho é: " << myset.size() << '\n';
    for (it = myset.begin(); it != myset.end(); ++it){
       cout << *it << '\n';
    }
      
    myset.erase(myset.begin(), myset.end());
    // Excluir intervalo especificado
    cout << "\nApós a exclusão dos elementos:\n \n";
    cout << "Tamanho é: " << myset.size();
    for (it = myset.begin(); it != myset.end(); ++it){
       cout << *it << '\n';
    } 
    return 0;
}

Saída:

Antes da exclusão dos elementos: 
Tamanho é: 3
10
20
30
Após a exclusão dos elementos: 
Tamanho é: 0

No exemplo acima, foi usado o função Erase (first, last) para excluir elementos dentro de um intervalo especificado (ou seja, do início ao fim).

Exemplo4

Vamos ver um exemplo simples para remover todos os números ímpares de um conjunto:

#include <set>
#include <iostream>
using namespace std;
int main()
{
    set<int> m = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
                          
    // Remover todos os números ímpares de m
    cout << "Após a remoção dos números ímpares, os elementos são:\n \t ";
    for (auto it = m.begin(); it != m.end();){
        if (*it % 2 == 1){
            it = m.erase(it);
        } else {
            ++it;
        }
     }
    for (auto& p : m) {
       cout << p << ", ";
     }
}

Saída:

Após a remoção dos números ímpares, os elementos são:
 2, 4, 6, 8, 10, 12, 14,

No exemplo acima, todos os números ímpares foram removidos e os pares mostrados.

Exemplo5

Vamos ver outro exemplo:

#include <set>  
#include <string>  
#include <iostream>  
#include <iterator> // next() e prev() funções auxiliares 
  
using namespace std;  
  
using myset = set<string>;  
  
void printset(const myset& s) {  
    for (const auto& iter : s) {  
        cout << " [" << iter << "]";  
    }  
    cout << endl << "size() == " << s.size() << endl << endl;  
}  
  
int main()  
{  
    myset s1;  
  
    // Inserir alguns dados para teste, um de cada vez
    s1.insert("Bob");  
    s1.insert("Robert");  
    s1.insert("Bert");  
    s1.insert("Rob");  
    s1.insert("Bobby");  
  
    cout << "O conjunto s1Os dados iniciais são:" << endl;  
    printset(s1);  
    // A primeira função membro remove o elemento na posição especificada  
    s1.erase(next(s1.begin()));  
    cout << "Remover o2após adicionar1para:" << endl;  
    printset(s1);  
  
    // Usar uma lista de inicialização para inserir um dado de teste a cada vez
    myset s2{ "miar", "hiss", "ruga suave", "ruga", "grito" };  
  
    cout << "O conjunto s2Os dados iniciais são:" << endl;  
    printset(s2);  
    // A segunda função membro remove o elemento 
    // no intervalo [Primeiro, Último)  
    s2.erase(next(s2.begin()), prev(s2.end()));  
    cout << "Remover o elemento intermediário do conjunto s2para:" << endl;  
    printset(s2);  
  
    myset s3;  
  
    // Usar emplace para inserir um dado de teste a cada vez 
    s3.emplace("C");  
    s3.emplace("C#");  
    s3.emplace("D");  
    s3.emplace("D#");  
    s3.emplace("E");  
    s3.emplace("E#");  
    s3.emplace("F");  
    s3.emplace("F#");  
    s3.emplace("G");  
    s3.emplace("G#");  
    s3.emplace("A");  
    s3.emplace("A#");  
    s3.emplace("B");  
  
    cout << "O conjunto s3Os dados iniciais são:" << endl;  
    printset(s3);  
    // A terceira função membro remove o elemento com a chave fornecida 
    myset::size_type count = s3.erase("E#");  
    // A terceira função membro também retorna o número de elementos removidos
    cout << "Remover o elemento do s3O número de elementos removidos é: << count << "." << endl;  
    cout << "Remover o elemento com a chave "E#" do conjunto s3para:" << endl;  
    printset(s3);  
}

Saída:

O conjunto s1Os dados iniciais são:
 [Bert] [Bob] [Bobby] [Rob] [Robert]
size() == 5
remover o2após adicionar1Para:
 [Bert] [Bobby] [Rob] [Robert]
size() == 4
O conjunto s2Os dados iniciais são:
 [ruga] [hiss] [miar] [ruga suave] [grito]
size() == 5
Após a exclusão do elemento central, o conjunto s2Para:
 [growl] [yowl]
size() == 2
O conjunto s3Os dados iniciais de:
 [A] [A#] [B] [C] [C#] [D] [D#] [E] [E#] [F] [F#] [G] [G#]
size() == 13
De s3No conjunto s removidos é: 1.
Após a exclusão do elemento com a chave “ E# ”, o número de elementos removidos do conjunto s3Para:
 [A] [A#] [B] [C] [C#] [D] [D#] [E] [E#] [F] [F#] [G] [G#]
size() == 12

C++ Set ( Conjunto ) do STL