Ich entwerfe einen Simulator für mehrstufige Warteschlangenprozesse in C++, aber ich habe ein Problem, wenn ich versuche, mehrere Warteschlangen zu implementieren (meine Warteschlangen sind Vektoren) .So, In jedem dieser Elemente befindet sich ein Vektor (Typ t_PCB).
vector<vector<t_PCB>> multilevel[4];
Meine Frage ist: Wie kann ich ein Element am Ende eines dieser 4 t_PCB
-Vektoren einfügen? Danke im Voraus.
Ich habe die Codezeile unten ausprobiert, aber sie funktioniert nicht (Fehler: keine übereinstimmende Memberfunktion für den Aufruf 'Push_back').
multilevel[0].Push_back(p); //where "p" is a t_PCB object
Die Zeile von oben kann nicht verwendet werden, wenn von "Mehrebenen" gesprochen wird, da dieses Array nur Argumenttypen akzeptiert: vector <t_PCB>
Also, wie ich am Anfang frage: Wie kann ich einen Objekttyp "t_PCB" in "Mehrebenenebene" verschieben?
Auf diese Weise:
vector<vector<t_PCB> > multilevel[4];
Sie deklarieren einArray von vier vectors
mit Nullgröße, die jeweils Objekte des Typs vector<t_PCB>
enthalten können. Was Sie wahrscheinlich wollten, ist eher:
vector<vector<t_PCB> > multilevel(4);
// ^^^
Dadurch wird ein Vektor von vier standardmäßig initialisierten Objekten vom Typ vector<t_PCB>
instanziiert. Dann können Sie einfach folgendes tun:
multilevel[size].Push_back(p);
Beachten Sie jedoch, dass Vektorindizes (wie Arrayindizes) nullbasiert sind. Daher muss size
kleiner als die Größe des Vektors sein.
Im obigen Ausdruck gibt der Unterausdruck multilevel[size]
eine Referenz auf den size
- ten Vektor in multilevel
zurück, und Sie rufen dann die Memberfunktion Push_back(p)
auf, die das Element p
an ihn anhängt.
Das Deklarieren eines zweidimensionalen Vektors ähnelt dem Deklarieren eines Arrays. Sie können es auch auf dieselbe Weise verwenden ...
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;
Sie erstellen ein Array von vector<vector<t_PCB>>
anstelle eines einzelnen Objekts.
Ich denke, der richtige Weg zu tun, was Sie wollen, ist:
vector<vector<t_PCB>> multilevel(4);
multilevel[0].Push_back(p)
Sie können einen Vektor anstelle eines Arrays erstellen:
std::vector< std::vector<t_PCB>> multilevel(4); // 2 dim array, 1st dim is 4
und dann können Sie Push_back am Ende des mit WHICH
indizierten Vektors folgendermaßen:
multilevel[WHICH].Push_back(p)
Und nur um es dort hinzustellen, um auf den Vektor der Vektoren zuzugreifen:
multilevel[outer][inner]
dabei gibt outer
den Vektor an diesem Index zurück und weitere Indexierung mit inner
gibt das t_PCB
-Objekt zurück. Sie können auch die Array-artige Indizierung durch die Funktion .at () für Begrenzungsprüfungen ersetzen.