¿Puedes hacer un vector de vectores en c?++?

¿Puedes hacer un vector de vectores en c?++?
Sí! Sí, puedes hacer un vector de vectores en C++. El vector normal es una estructura de datos de lista unidimensional. Un vector de vectores es una estructura de datos de lista bidimensional, de dos vectores normales. Una lista bidimensional es una tabla, sin una fila de encabezado adecuada y sin una columna de encabezado adecuada. Un vector de vectores es un vector anidando otros vectores. El argumento de la plantilla para el vector exterior es un vector. Y así, un vector de vectores solo puede ser de un tipo, e.gramo., todos los enteros o todos los personajes.

Este artículo explica cómo crear un vector de vectores y cómo aplicar algunas funciones miembro obvias del vector, al vector de vectores. Para hacer esto, el programa C ++ debe comenzar con:

#incluir
#incluir
usando el espacio de nombres STD;

Tenga en cuenta la inclusión de la biblioteca vectorial.

Contenido del artículo

  • Construcción
  • Acceso con índices
  • Acceso en secuencia
  • Insertando una fila
  • Agregar una fila
  • Borrando filas
  • Claro
  • Conclusión

Construcción

La construcción de un vector normal comienza con:

vector nombre

El nombre es el nombre del vector. El siguiente código crea un vector unidimensional con una lista de inicialización arriesgada de 5 caracteres:

vector vtr = 'a', 'b', 'c', 'd', 'e';

Para construir un vector de vectores, comience con:

vector> Nombre

Observe cómo una plantilla vectorial se ha convertido en otro argumento de plantilla. Entonces, debe interpretarse como vector de vectores del mismo tipo. El nombre es el nombre del vector de vectores. El siguiente código crea un vector bidimensional con 6 listas de inicialización de 5 caracteres cada una para 6 filas.

vector> vtr = 'a', 'b', 'c', 'd', 'e',
'A B C D E',
'A B C D E',
'A B C D E',
'A B C D E',
'A B C D E';

El vector exterior literal, tiene delimitadores, y. Cada vector para una fila tiene delimitadores, y. Los literales de vector de fila están separados por comas. La finura de la finura está en el extremo inferior derecho de la tabla de creación. El vector 2D podría haberse creado de la siguiente manera:

vector onedv = 'a', 'b', 'c', 'd', 'e';
vector> twodv = Onedv, ONEDV, ONEDV, ONEDV, ONEDV, ONEDV;

Es decir, se crea un vector 1D y su nombre variable se usa como identificadores para las diferentes filas.

Ahora, las filas en realidad pueden tener diferentes contenidos. En ese caso, cada fila será un vector diferente con un nombre diferente.

Acceso con índices

La sintaxis para acceder a un elemento es:

2dvectorname [i] [j]

Donde yo es la variable para una fila en particular, y j es la variable para una columna en particular. El conteo de filas comienza desde cero, y el recuento de columnas también comienza desde cero. El vector bidimensional de los vectores no tiene que ser regular; es decir, el número de columnas para cada fila no tiene que ser el mismo. El siguiente código lee el valor de la fila de índice 2 (tercera fila) y la columna del índice 3 (cuarta columna):

vector> vtr = 'a', 'b', 'c', 'd', 'e',
'A B C D E',
'A B C D E',
'A B C D E',
'A B C D E',
'A B C D E';
char ch = vtr [2] [3];
cout << ch << endl;

La salida es, 'D'.

Esto se puede cambiar y leer nuevamente de la misma manera, con el siguiente segmento de código:

VTR [2] [3] = 'Z';
char ch = vtr [2] [3];
cout << ch << endl;

En este caso, la salida es 'Z'.

Acceso en secuencia

Se puede acceder a la primera fila a partir del primer elemento, luego el segundo elemento, luego el tercer elemento, hasta el último elemento de la primera fila. Luego, se puede acceder a la siguiente fila de la misma manera, luego la después, y luego la siguiente, hasta que se complete la última fila. Esto necesita dos bucles para que el siguiente código ilustra:

vectoronedv = 'a', 'b', 'c', 'd', 'e';
vectorTWODV = ONEDV, ONEDV, ONEDV, ONEDV, ONEDV, ONEDV;
para (int i = 0; ipara (int j = 0; jcout<
cout<
cout<La salida es:

A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E

Tenga en cuenta que TWODV.size () da el número de filas para toda la tabla, mientras que TWODV [i].size () da el número de celdas (columnas) para una fila particular.

Insertando una fila

Insertando en el frente

Una fila es para un vector 2D, como una celda es para un vector 1D. Se usa el mismo enfoque de inserción, pero en lugar de una célula literal, se usa una fila literal; En lugar de un identificador de valor, un identificador de fila (e.gramo., se usa twodv [i]). El siguiente código muestra cómo se inserta una fila frente al vector 2D:

vectortwodv = 'a', 'b', 'c', 'd', 'e',
'A B C D E',
'A B C D E',
'A B C D E';
vector:: iterador p = twodv.comenzar();
vectoronedv = '*', '$', '%', '$', '&';
TWODV.insertar (p, ONEDV);
para (int i = 0; ipara (int j = 0; jcout<
cout<
cout<La salida es:

* $ % $ Y
A B C D E
A B C D E
A B C D E
A B C D E

La función de miembro Begin () devuelve un iterador que apunta a la primera fila del vector 2D. Tenga en cuenta que el iterador devuelto debe ser de tipo vector de vectores (e.gramo. vector:: iterador p). La inserción tiene lugar frente a donde apunta el iterador.

Insertando dentro

El siguiente código inserta una fila dentro de la tabla, frente a la tercera fila puntiaguda:

vectortwodv = 'a', 'b', 'c', 'd', 'e',
'A B C D E',
'A B C D E',
'A B C D E';
vector:: iterador p = twodv.comenzar();
p ++; p ++;
vectoronedv = '*', '$', '%', '$', '&';
TWODV.insertar (p, ONEDV);
para (int i = 0; ipara (int j = 0; jcout<
cout<
cout<La salida es:

A B C D E
A B C D E
* $ % $ Y
A B C D E
A B C D E

El iterador se incrementó dos veces para apuntar a la tercera fila antes de la inserción. La declaración de inserción podría haberse escrito igualmente como,

TWODV.insert (p, '*', '$', '%', '$', '&');

El resultado habría sido el mismo.

Agregar una fila

Se puede agregar una fila utilizando la función unidimensional push_back (). El siguiente código ilustra esto:

vectortwodv = 'a', 'b', 'c', 'd', 'e',
'A B C D E',
'A B C D E',
'A B C D E';
vectoronedv = '*', '$', '%', '$', '&';
TWODV.push_back (ONEDV);
para (int i = 0; ipara (int j = 0; jcout<
cout<
cout<La salida es:

A B C D E
A B C D E
A B C D E
A B C D E
* $ % $ Y

La instrucción push_back () podría haberse escrito igualmente como,

TWODV.push_back ('*', '$', '%', '$', '&');

El resultado habría sido el mismo.

Borrando filas

El siguiente código utiliza la función de miembro vectorial ERASE () unidimensional para borrar la segunda y tercera filas, aunque el segundo iterador apunta a la cuarta fila, del vector de 5 filas de vectores:

vectortwodv = 'a', 'b', 'c', 'd', 'e',
'A B C D E',
'A B C D E',
'A B C D E',
'A B C D E';
vector:: iterador p = twodv.comenzar();
p ++;
vector:: iterator q = twodv.fin();
Q--; Q--;
TWODV.borrar (p, q);
para (int i = 0; ipara (int j = 0; jcout<
cout<
cout<La salida es:

A B C D E
A B C D E
A B C D E

La función de miembro del vector de end () unidimensional devuelve un iterador, que apunta justo después del final del vector unidimensional (que ahora es un vector de vectores). Se disminuye dos veces en el código anterior, para apuntar a la última berina. Siempre que se borre una gama de elementos o filas, el elemento o la fila apuntan por el segundo iterador, no se borra.

Claro

Un elemento es para un vector unidimensional, como una fila es para un vector bidimensional (vector de vectores). Todas las filas de un vector se pueden borrar con la función miembro unidimensional transparente (). El siguiente código ilustra esto:

vectortwodv = 'a', 'b', 'c', 'd', 'e',
'A B C D E',
'A B C D E',
'A B C D E',
'A B C D E';
TWODV.claro();
para (int i = 0; ipara (int j = 0; jcout<
cout<
cout<La salida no es nada.

Conclusión

Un elemento es para un vector unidimensional, como una fila es para un vector bidimensional (vector o vectores). Todas las funciones de miembros unidimensionales para el vector unidimensional se pueden usar para el vector bidimensional, abordando las filas en lugar de los elementos. Se puede acceder a las células individuales de la tabla con TWODV [I] [J], donde TWODV, I y J tienen sus significados comunes. El vector de las filas se puede abordar con TWODV, y cada fila se puede abordar con TWODV [i].