Remover elemento do array em C++
- 
          
            Use as funções std::to_arrayestd::removepara remover elemento de um array em C++
- 
          
            Use as funções std::eraseestd::removepara remover elemento de um array em C++
 
Este artigo explicará vários métodos de como remover um elemento de um array em C++.
Use as funções std::to_array e std::remove para remover elemento de um array em C++
    
Os arrays podem ser definidos como de comprimento fixo ou dinâmico em C++, e ambos precisam de métodos diferentes para a remoção de elementos. Neste exemplo, consideramos as matrizes fixas de estilo C integradas, uma vez que são comumente manipuladas pelos programas numéricos para eficiência.
Declararemos um array de int e removeremos o valor do elemento de 2, que ocorre duas vezes neste array. std::remove faz parte da biblioteca de algoritmos e remove todas as instâncias do elemento fornecido no intervalo especificado.
Embora, em primeiro lugar, convertamos o objeto arr para o recipiente std::array usando a função std::to_array para usar com segurança com o método std::remove. O último algoritmo retorna o iterador para o novo final do intervalo, o que significa que o objeto array resultante ainda contém 10 elementos e precisamos copiá-los para o novo local. Como o objeto original era um array no estilo C, alocamos uma nova memória dinâmica para o array de oito elementos int e usamos a função std::memmove para copiar o conteúdo do objeto array. Lembre-se de que calculamos o valor 8 usando a função std::distance.
#include <array>
#include <cstring>
#include <iostream>
#include <iterator>
using std::array;
using std::cout;
using std::endl;
using std::remove;
int main() {
  int arr[10] = {1, 1, 1, 2, 2, 6, 7, 8, 9, 10};
  int elem_to_remove = 2;
  cout << "| ";
  for (const auto &item : arr) {
    cout << item << " | ";
  }
  cout << endl;
  auto tmp = std::to_array(arr);
  auto len =
      std::distance(tmp.begin(), (tmp.begin(), tmp.end(), elem_to_remove));
  auto new_arr = new int[len];
  std::memmove(new_arr, tmp.data(), len * sizeof(int));
  cout << "| ";
  for (int i = 0; i < len; ++i) {
    cout << new_arr[i] << " | ";
  }
  cout << endl;
  delete[] new_arr;
  return EXIT_SUCCESS;
}
Resultado:
| 1 | 1 | 1 | 2 | 2 | 6 | 7 | 8 | 9 | 10 |
| 1 | 1 | 1 | 6 | 7 | 8 | 9 | 10 |
Use as funções std::erase e std::remove para remover elemento de um array em C++
Outro cenário para esse problema ocorre quando a matriz fornecida é do tipo std::vector. Desta vez, temos os recursos de array dinâmico e é mais flexível usar uma função integrada para manipulações de elementos.
No código de exemplo a seguir, utilizaremos o idioma erase-remove e removeremos todas as ocorrências do elemento fornecido no intervalo. Observe que std::erase leva dois iteradores para denotar o intervalo de remoção. Portanto, ele precisa do valor de retorno do algoritmo std::remove para especificar o ponto de partida. Lembre-se de que, se chamarmos apenas o método std::remove, o objeto arr2 terá elementos como - {1, 1, 1, 6, 7, 8, 9, 10, 9, 10}.
#include <iostream>
#include <iterator>
#include <vector>
using std::cout;
using std::endl;
using std::remove;
using std::vector;
int main() {
  vector<int> arr2 = {1, 1, 1, 2, 2, 6, 7, 8, 9, 10};
  int elem_to_remove = 2;
  cout << "| ";
  for (const auto &item : arr2) {
    cout << item << " | ";
  }
  cout << endl;
  arr2.erase(std::remove(arr2.begin(), arr2.end(), elem_to_remove), arr2.end());
  cout << "| ";
  for (const auto &item : arr2) {
    cout << item << " | ";
  }
  cout << endl;
  return EXIT_SUCCESS;
}
Resultado:
| 1 | 1 | 1 | 2 | 2 | 6 | 7 | 8 | 9 | 10 |
| 1 | 1 | 1 | 6 | 7 | 8 | 9 | 10 |
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook