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"?
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
.
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;
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)
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)
Et juste pour le mettre là-bas, pour accéder au vecteur de vecteurs:
multilevel[outer][inner]
où 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.