Redimensionar el array en C++

Jinku Hu 12 octubre 2023
  1. Usar el método resize para redimensionar un array en C++
  2. Use el método erase para reducir el número de elementos en el array en C++
  3. Usar la función definida por el usuario para redimensionar un array en C++
Redimensionar el array en C++

Este artículo presentará múltiples métodos de cómo redimensionar un array en C++.

Usar el método resize para redimensionar un array en C++

Dado que los contenedores de longitud fija no se supone que se redimensionen en C++, nos centraremos en la clase std::vector. resize es la función incorporada del contenedor vector, y cambia el número de elementos que contiene el vector. La función puede reducir el número de elementos si el primer argumento count es menor que el tamaño actual del vector. De lo contrario, si el argumento count es mayor que el tamaño del vector, resize inserta elementos adicionales con valores por defecto de 0 o el usuario puede suministrar el valor deseado como segundo argumento de la función.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};

  cout << "i_vec1             : ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;

  i_vec1.resize(i_vec1.size() - 2);

  cout << "i_vec1 (resized -2): ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

Producción :

i_vec1             : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized -2): 12; 32; 43; 53; 23;
size: 5

Use el método erase para reducir el número de elementos en el array en C++

La función erase es otro método incorporado de la clase std::vector que puede eliminar un solo elemento del vector o incluso borrar todo el rango especificado con los iteradores correspondientes.

En el siguiente ejemplo, un rango dado desde el elemento 2 hasta el final se elimina del vector de los números enteros. Observe que es una práctica común pasar los parámetros del rango con los iteradores de begin/end.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};

  cout << "i_vec1          : ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;

  i_vec1.erase(i_vec1.begin() + 2, i_vec1.end());

  cout << "i_vec1 (resized): ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

Producción :

i_vec1          : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized): 12; 32;
size: 2

Usar la función definida por el usuario para redimensionar un array en C++

Alternativamente, podemos definir una función separada que itera a través del vector y elimina un número determinado de elementos del extremo del vector. Esto puede ser implementado usando la función incorporada pop_back que remueve el último elemento en el vector. Como se muestra en el siguiente ejemplo de código, la plantilla de la función resizeVector está definida para tomar un vector de tipo T y varios elementos para eliminarlo.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

template <typename T>
void resizeVector(vector<T> &vec, int elems) {
  for (auto i = 0; i < elems; ++i) {
    vec.pop_back();
  }
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};

  cout << "i_vec1          : ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;

  resizeVector(i_vec1, 3);

  cout << "i_vec1 (resized): ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

Producción :

i_vec1          : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized): 12; 32; 43; 53;
size: 4
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C++ Array