English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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
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.
Ele retorna um iterador para o elemento seguinte ao elemento removido ou retorna a quantidade de elementos removidos.
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.
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.
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.
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.
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.
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.
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).
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.
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