Existem duas maneiras pelas quais você pode usar para apagar um item particularmente. vamos pegar um vetor
std :: vector < int > v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(40);
v.push_back(50);
1) Maneira não eficiente: embora pareça ser bastante eficiente, mas não é porque a função apagar apaga os elementos e muda todos os elementos para a esquerda por 1., de
modo que sua complexidade será O (n ^ 2)
std :: vector < int > :: iterator itr = v.begin();
int value = 40;
while ( itr != v.end() )
{
if(*itr == value)
{
v.erase(itr);
}
else
++itr;
}
2) Maneira eficiente (RECOMENDADO) : Também é conhecido como expressões ERASE - REMOVE .
- std :: remove transforma o intervalo fornecido em um intervalo com todos os elementos comparáveis diferentes de um determinado elemento deslocados para o início do contêiner.
- Portanto, na verdade, não remova os elementos correspondentes. Apenas mudou o não correspondente para inicial e fornece um iterador para um novo final válido. Requer apenas O (n) complexidade.
A saída do algoritmo de remoção é:
10 20 30 50 40 50
como o tipo de retorno de remoção é o iterador para o novo final desse intervalo.
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);
Agora use a função de exclusão do vetor para excluir elementos do novo extremo para o antigo do vetor. Requer tempo O (1).
v.erase ( std :: remove (v.begin() , v.end() , element ) , v.end () );
então esse método funciona em O (n)