Remover elemento do array em C++
-
Use as funções
std::to_array
estd::remove
para remover elemento de um array em C++ -
Use as funções
std::erase
estd::remove
para 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