Vector 2D en C++ con tamaño definido por el usuario

Un vector 2D es un vector del vector. Al igual que las arrays 2D, ¡podemos declarar y asignar valores a un vector 2D!

Suponiendo que está familiarizado con un vector normal en C++, con la ayuda de un ejemplo, demostramos cómo un vector 2D difiere de un vector normal a continuación: 

C++

/* Vectors belong to a C++ library 
   called STL so we need to import 
   it first! */
#include <vector> 
using namespace std;
int main()
{
    /*
    In the case of a normal vector we initialize it as:
      
    1. vector<datatype> variable_name
      
    Now in the case of a 2D vector all we do is create
    a vector of datatype vector.
      
    We simply replace "datatype" with "vector<int>":
      
    1. vector<vector<int>> variable_name
      
    That's literally it! We just created a 2D vector!
    On line 23 below we declare an actual 2D vector
    named "vect".
    */
      
    vector<vector<int>> vect;
  
    return 0;
}

En un vector 2D, cada elemento es un vector.

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

C++

/* C++ code to demonstrate a 2D vector 
   with elements(vectors) inside it. */
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    /*
    Below we initialize a 2D vector 
    named "vect" on line 12 and then
    we declare the values on 
    line 14, 15 and 16 respectively.
    */
      
    vector<vector<int>> vect
    {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
      
    /*
    Now we print the values that 
    we just declared on lines
    14, 15 and 16 using a simple 
    nested for loop.
    */
      
    for (int i = 0; i < vect.size(); i++)
    {
        for (int j = 0; j < vect[i].size(); j++)
        {
            cout << vect[i][j] << " ";
        }    
        cout << endl;
    }
  
    return 0;
}
Producción

1 2 3 
4 5 6 
7 8 9 

Complejidad de tiempo: O(N*N)

Espacio Auxiliar: O(N*N) 

Otro enfoque para acceder a los elementos del vector:

C++

/* C++ code to demonstrate a 2D vector 
   with elements(vectors) inside it. */
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    /*
    Below we initialize a 2D vector 
    named "vect" on line 12 and then
    we declare the values on 
    line 14, 15 and 16 respectively.
    */
      
    vector<vector<int>> vect
    {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
      
    /*
    Now we print the values that 
    we just declared on lines
    14, 15 and 16 using a simple 
    nested for loop with the help of iterator.
    */
      
    /*
    vector<vector<int>> vect
    We can divide this declaration to two parts, which will
    help us to understand the below concepts.
      
    1. vect is a 2D vector consisting multiple elements of type vector<int>. 
    2. vector<int> is a 1D vector consisting of multiple int data.
      
    So we can use iterator provided by STL instead of 
    i,j variable used in for loop. It can reduce the error which can 
    happen wrt to i, j operations(i++, j++)     
      
    In the below code we are using iterator to access the vector elements.
    1. We are getting vect1D vectors of type vector<int> from the 2D vector vect.
    2. We are getting int elements to x from the vector<int> vect 1D vector.
      
    */
      
    for (vector<int> vect1D : vect)
    {
        for (int x : vect1D)
        {
            cout << x << " ";
        }    
        cout << endl;
    }
  
    return 0;
}
Producción

1 2 3 
4 5 6 
7 8 9 

Complejidad de tiempo: O(N*N)

Espacio Auxiliar: O(N*N) 

Al igual que las arrays irregulares de Java , cada elemento de un vector 2D puede contener un número diferente de valores.

C++

/*
C++ program to demonstrate a 2D vector where
each of its elements is of different size.
*/
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    /*
    We initialize a 2D vector 
    named "vect" on line 16 with
    different number of values 
    in each element.
    */
      
    vector<vector<int>> vect
    {
        /* Element one with 2 values in it. */
        {1, 2}, 
        
        /* Element two with 3 values in it. */
        {4, 5, 6}, 
        
         /* Element three with 4 values in it. */
        {7, 8, 9, 10} 
    };
  
    /*
    Now we print the vector that we 
    just defined using a simple
    nested for loop.
    */
      
    for (int i = 0; i < vect.size(); i++) 
    {
        for (int j = 0; j < vect[i].size(); j++)
        {
            cout << vect[i][j] << " ";
        }    
        cout << endl;
    }
    return 0;
}    

CPP-STL-Self-Paced-Course

Producción

1 2 
4 5 6 
7 8 9 10 

Problema de ejercicio: Defina el vector 2D con diferentes tamaños de columnas. 
Ejemplos: 

Input : Number of rows : 5 
        Number of columns in rows : 
        2 3 4 5 1
Output : 1 2
         1 2 3
         1 2 3 4
         1 2 3 4 5 
         1

Input : Number of rows : 3
        Number of columns in rows : 
        3 2 1

Output : 1 2 3
         1 2
         1

Los vectores 2D a menudo se tratan como una array con «filas» y «columnas» dentro. Debajo del capó, en realidad son elementos del vector 2D. 
Primero declaramos una variable entera llamada «fila» y luego una array llamada «columna» que contendrá el valor del tamaño de cada fila. 

Luego de eso procedemos a inicializar la memoria de cada fila por el tamaño de columna.

C++

/* 
C++ program to create a 2D vector where 
every row has a certain number of values
as defined by the user.(On line 13)
*/   
  
#include <iostream>
#include <vector>
using namespace std;
int main()
{
      
    /* Here we tell how many rows 
    the 2D vector is going to have. */
    int row = 5;
    
    /* We define the number of values 
    each row is supposed to have. */
    int column[] = {5, 3, 4, 2, 1}; 
  
    /*
    We now create a vector of vector with size
    equal to row.
    */
      
    vector<vector<int>> vec(row);
    /*
    On line 21 we created a 2D vector and assigned
    it a capacity of "row"(in this case 5) units.
    */
      
    /*
    Now we will proceed to create the structure of
    our 2D vector by assigning the value of rows and
    columns through a nested for loop.
    */
  
    for(int i = 0; i < row; i++)
    {   
        /* Declaring the size of the column. */
        int col = column[i]; 
  
        /*
        On the 43rd line we declare the 
        i-th row to the size of the column.
        We create a normal vector of capacity "col" which
        in every iteration of the for loop will define the
        values inside of each row.
        */
        vec[i] = vector<int>(col);
        for(int j = 0; j < col; j++)
        {
            vec[i][j] = j + 1;
        }    
    }
      
    /*
    We now finally use a simple nested for loop
    to print the 2D vector that we just created above.
    */
  
    for(int i = 0; i < row; i++)
    {
        for (int j = 0; j < vec[i].size(); j++)
        {
            cout << vec[i][j] << " ";
        }    
        cout << endl;
    }
    return 0;
}
Producción

1 2 3 4 5 
1 2 3 
1 2 3 4 
1 2 
1 

Otro enfoque 
Supongamos que queremos inicializar un vector 2D de «n» filas y «m» columnas, con un valor de 0.

C++

// CPP program
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n = 3;
    int m = 4;
  
    /*
    We create a 2D vector containing "n"
    elements each having the value "vector<int> (m, 0)".
    "vector<int> (m, 0)" means a vector having "m"
    elements each of value "0".
    Here these elements are vectors.
    */
    vector<vector<int>> vec( n , vector<int> (m, 0)); 
  
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            cout << vec[i][j] << " ";
        }
        cout<< endl;
    }
      
    return 0;
}
Producción

0 0 0 0 
0 0 0 0 
0 0 0 0 

Complejidad de tiempo: O(N*M)

Espacio auxiliar: O(N*M) 

Otro enfoque más: 
supongamos que queremos crear un vector 2D de «n» filas y «m» columnas y valores de entrada. 

C++

// CPP program
#include <iostream>
#include <vector> 
using namespace std;
int main()
{
    int n = 4;
    int m = 5;
  
    /*
    Create a vector containing "n"
    vectors each of size "m".
    */ 
    vector<vector<int>> vec( n , vector<int> (m)); 
  
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            vec[i][j] = j + i + 1;
        }
    }
  
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            cout << vec[i][j] << " ";
        }
        cout << endl;
    }
      
   return 0;
}
Producción

1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 
4 5 6 7 8 

Complejidad de tiempo: O(N*M)

Espacio auxiliar: O(N*M)

Esperamos que termine este artículo con una mejor comprensión de los vectores 2D y ahora tenga la confianza suficiente para aplicarlos por su cuenta.

Este artículo es una contribución de Amit Verma . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *