Inicializar vectores 2D en C++

Muhammad Husnain 12 octubre 2023
  1. Vectores en C++
  2. Inicializar vectores en C++
  3. Accede a los Valores de un Vector en C++
  4. Inicializar vectores bidimensionales en C++
Inicializar vectores 2D en C++

Este breve tutorial de programación trata sobre el uso de vectores 2D en C++.

Antes de saltar a los vectores 2D, primero veremos una introducción rápida a los vectores y su uso en C++. Luego, pasaremos a los vectores multidimensionales y su uso.

Vectores en C++

Los vectores actúan exactamente como matrices dinámicas con una característica adicional de cambiar de tamaño automáticamente al insertar o eliminar un elemento. Los vectores pueden almacenar elementos homogéneos (es decir, elementos de tipos de datos similares).

Un vector puede cambiar el tamaño de su contenedor o almacenamiento automáticamente con las adiciones y eliminaciones.

Todos los miembros de un vector se almacenan en la memoria. Cada siguiente elemento es adyacente al anterior para que se pueda acceder fácilmente a él a través de iteradores.

Cuando se agrega un nuevo elemento, se coloca al final y toma una cantidad de tiempo diferente en cada inserción porque primero verifica si la memoria está disponible o no. Si la memoria no está disponible, primero asigna algo de memoria nueva y luego inserta el elemento en el vector.

Por otro lado, eliminar un elemento del último lleva una cantidad de tiempo constante porque no realiza el cambio de tamaño en cada eliminación.

Inicializar vectores en C++

Tenemos archivos de biblioteca de vectores en la biblioteca de plantillas estándar (STL) de C++. Por lo tanto, para usar vectores, debemos incluir el archivo de encabezado requerido, así:

#include <vector>

Para declarar un vector se sigue la siguiente sintaxis:

vector<int> v1;

Tenga en cuenta que no necesitamos especificar el tamaño de los vectores, ya que los vectores pueden aumentar su tamaño de forma dinámica y automática cuando sea necesario. Podemos usar la lista de inicializadores o la inicialización uniforme para inicializar el vector.

Estos dos métodos se muestran en el siguiente ejemplo:

vector<int> vec1 = {21, 22, 23, 24, 25};  // initializer list method
vector<int> vec2{21, 22, 23, 24, 25};     // uniform initialization

Hay otro método para inicializar un vector si queremos llenar todo el vector con el mismo valor. Esto se muestra a continuación:

vector<int> vec3(4, 11);

Esto inicializará un vector de tamaño 4, y todos los elementos tendrán el valor de 11 así: {11,11,11,11}.

Además, si no introducimos los datos en el vector en el momento en que hemos declarado el vector, podemos añadirlo más tarde mediante la función push_back. La sintaxis de esta función es:

vec1.push_back(value);

Esto insertará el valor como el último elemento del vector.

Accede a los Valores de un Vector en C++

Hay ciertos métodos para la iteración en vectores.

Función Objetivo
begin() Esta función devuelve un puntero de iterador al primer elemento del vector.
end() Esta función devuelve un puntero de iterador al último elemento del vector.
size() Esta función devuelve el tamaño total del vector, lo que significa cuántos elementos tiene.
at(p) Esta función devuelve el puntero al elemento en la posición p en el vector.
empty() Esta función comprueba si el vector está vacío o no.

Estas funciones se muestran en el siguiente fragmento de código:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> vec1;
  for (int j = 1; j <= 5; j++) vec1.push_back(j + 1);
  cout << "Size: " << vec1.size() << endl;
  cout << "Output of begin and end functions: ";
  for (auto a = vec1.begin(); a != vec1.end(); ++a) cout << *a << " ";
  cout << endl;
  cout << "Element at position 3: " << vec1.at(3) << endl;
  return 0;
}

Producción :

Size: 5
Output of begin and end functions: 2 3 4 5 6
Element at position 3: 5

Inicializar vectores bidimensionales en C++

Al igual que las matrices 2D, los vectores 2D también son un vector de vectores. Cada elemento de dicho vector es un vector en sí mismo.

Al igual que en las matrices irregulares de Java, podemos tener un vector de varios tamaños en cada posición de un vector 2D. Esto se comporta como una matriz que tiene cierto número de filas y columnas.

La diferencia es que puede tener un número variable de columnas en cada fila.

Sintaxis para la declaración:

vector<vector<int>> vec1{{1, 1, 0}, {0, 2}, {2, 1, 3}};

Como es una estructura 2D, necesitamos dos bucles para iterar a través de este vector: un bucle para recorrer filas y el bucle interno para recorrer columnas.

for (int a = 0; a < vec1.size(); a++) {
  for (int b = 0; b < vec1[a].size(); b++) cout << v1[a][b] << " ";

Asegúrese de que la función size() no devuelva el número total de elementos en el vector. En su lugar, devuelve el número total de vectores en este vector.

También podemos inicializar este vector especificando el número de filas y columnas de esta manera:

int rows = 3;
int columns = 4;
vector<vector<int>> vec1(rows, vector<int>(columns));

Veamos el código completo para crear vectores 2-D:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  int rows = 3;
  int columns = 4;
  vector<vector<int>> vec(rows, vector<int>(columns));
  for (int a = 0; a < rows; a++)  // loop for initializing the vector
  {
    for (int b = 0; b < columns; b++) {
      vec[a][b] = a * b;
    }
    cout << endl;
  }
  for (int a = 0; a < rows; a++)  // loop for displaying the values of vector
  {
    for (int b = 0; b < columns; b++) {
      cout << vec[a][b] << " ";
    }
    cout << endl;
  }
  return 0;
}

Producción :

0 0 0 0
0 1 2 3
0 2 4 6
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Artículo relacionado - C++ Vector