web-dev-qa-db-fra.com

vecteur de vecteurs Push_back

Je conçois un simulateur de processus de file d’attente à plusieurs niveaux en C++, mais j’ai un problème en essayant d’implémenter plusieurs files d’attente (mes files d’attente sont des vecteurs). Dans chacun de ces éléments, il y a un vecteur (type t_PCB). 

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

Ma question est la suivante: comment puis-je insérer un élément à la fin de l'un de ces 4 vecteurs t_PCB? Merci d'avance.

J'ai essayé la ligne de code ci-dessous mais cela ne fonctionne pas ( erreur : fonction de membre non correspondante pour l'appel 'Push_back')

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

La ligne ci-dessus ne peut pas être utilisée quand on parle de "multiniveau" car ce tableau accepte uniquement les arguments de type: vecteur <t_PCB> 

Ainsi, comme je le demande au début: comment puis-je insérer un type d'objet "t_PCB" dans "multiniveau"?

20
karl71

En faisant cela:

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

Vous déclarez un tableau de quatre vectors de taille zéro, pouvant contenir chacun des objets de type vector<t_PCB>. Ce que vous vouliez probablement faire, c'est plutôt:

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

Cela instanciera un vecteur de quatre objets initialisés par défaut de type vector<t_PCB>. Ensuite, vous pouvez simplement faire:

multilevel[size].Push_back(p);

Notez cependant que les index de vecteurs (comme les index de tableaux) sont basés sur zéro, donc size doit être inférieur à la taille du vecteur. 

Dans l'expression ci-dessus, la sous-expression multilevel[size] renvoie une référence au size- ème vecteur dans multilevel et sur ce vecteur, vous appelez ensuite la fonction membre Push_back(p), qui lui ajoute l'élément p.

22
Andy Prowl

Déclarer un vecteur à deux dimensions est similaire à déclarer un tableau. Vous pouvez également l'utiliser de la même manière ... 

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;
18
p.j

Vous créez un tableau de vector<vector<t_PCB>> au lieu d'un seul objet.

Je pense que la bonne façon de faire ce que vous voulez est:

vector<vector<t_PCB>> multilevel(4);
multilevel[0].Push_back(p)
4
Hugo Corrá

Vous pouvez créer un vecteur au lieu d'un tableau:

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

et ensuite vous pouvez Push_back à la fin du vecteur indexé avec WHICH de cette façon:

multilevel[WHICH].Push_back(p)
2
4pie0

Et juste pour le mettre là-bas, pour accéder au vecteur de vecteurs:

multilevel[outer][inner]

outer retournera le vecteur à cet index et une indexation ultérieure .__ avec inner renverra l'objet t_PCB Vous pouvez également remplacer l'indexation de type tableau par la fonction .at () pour les vérifications de limites.

0
gitfredy