vectors vectores sirve que push_back pop_back para c++ vector process push-back multi-level

c++ - sirve - vector de vectores push_back



vector c++ (6)

Estoy diseñando un simulador de proceso de cola de varios niveles en C ++, pero tengo un problema al intentar implementar varias colas (mis colas son vectores). Por lo tanto, "multinivel" es una matriz de 4 elementos (no vector). Dentro de cada uno de esos elementos hay un vector (tipo t_PCB).

vector<vector<t_PCB>> multilevel[4];

Mi pregunta es: ¿Cómo puedo insertar un elemento al final de uno de estos 4 vectores t_PCB ? Gracias de antemano.

He intentado la línea de código a continuación pero no funciona ( error : la función de miembro no coincide para la llamada ''push_back'')

multilevel[0].push_back(p); //where "p" is a t_PCB object

La línea de arriba no se puede usar cuando se habla de "multinivel" porque esta matriz solo acepta argumentos de tipo: vector <t_PCB>

Entonces, como pregunto al principio: ¿cómo puedo empujar un tipo de objeto "t_PCB" dentro de "multinivel"?


Al hacer esto:

vector<vector<t_PCB> > multilevel[4];

Declara una matriz de cuatro vectors tamaño cero, cada uno de los cuales puede contener objetos de tipo vector<t_PCB> . Lo que probablemente quisiste hacer es más bien:

vector<vector<t_PCB> > multilevel(4); // ^^^

Esto creará una instancia de un vector de cuatro objetos inicializados por defecto del tipo vector<t_PCB> . Entonces, simplemente puedes hacer:

multilevel[size].push_back(p);

Sin embargo, tenga en cuenta que los índices vectoriales (como los índices de matriz) están basados ​​en cero, por lo que el size debe ser menor que el tamaño del vector.

En la expresión anterior, la subexpresión multilevel[size] devuelve una referencia al size -th vector dentro de multilevel , y en ese vector está invocando la función miembro push_back(p) , que le agrega el elemento p .


Declarar un vector bidimensional es similar a declarar una matriz. También puedes usarlo de la misma manera ...

vector<vector<int> > vec; for(int i = 0; i < 5; i++) { vector<int> row; vec.push_back(row); } vec[0].push_back(5); cout << vec[0][0] << endl;


Está creando una matriz de vector<vector<t_PCB>> lugar de un solo objeto.

Creo que la forma correcta de hacer lo que quieres es:

vector<vector<t_PCB>> multilevel(4); multilevel[0].push_back(p)


Puedes crear un vector en lugar de una matriz:

std::vector< std::vector<t_PCB>> multilevel(4); // 2 dim array, 1st dim is 4

y luego puede push_back al final del vector indexado con WHICH esta manera:

multilevel[WHICH].push_back(p)


Y solo para ponerlo ahí, para acceder al vector de vectores:

multilevel[outer][inner]

donde outer devolverá el vector en ese índice y la indexación adicional con inner devolverá el objeto t_PCB . También puede reemplazar la indexación de estilo de matriz con la función .at() para verificaciones de límites.


vector<vector<int>> vec; // declare 2D vector for (int i=0; i<=3; i++) { vector<int> row; // create a row vector which adds a row to vec for (int j=0; j<=4; j++) { row.push_back(j*10); // push elements 0,10,20,30,40 to row } vec.push_back(row); // add this row to vec // Repeat this procedure 4 times to make a 4*5 2D vector } cout<<"output is "<<vec[2][4]; // output is 40