Die Klasse QVector gehört zu Containerklassen und bietet Zugriff auf Elemente nach Index sowie eine Reihe zusätzlicher Methoden zur Vereinfachung.
Eine Instanz der Klasse QVector ist im Wesentlichen ein eindimensionales Array von Objekten. Wenn Sie ein zweidimensionales Array als Vektor angeben müssen, können Sie eine Instanz von QVector erstellen, die andere Instanzen von QVector enthält.
Eindimensionales Array mit QVector
Speichern wir zunächst ein eindimensionales Array vom Typ int: in einen Vektor
QVector <int> myVector; int massive[4] = {1, 2, 3, 4}; for(int i = 0; i < 4; i++) { myVector.push_back(massive[i]); qDebug() << "Value " << i << ": " << myVector.value(i); }
Und sehen wir uns die Ausgabe von qDebug () an:
Value 0 : 1 Value 1 : 2 Value 2 : 3 Value 3 : 4
2D-Array in QVector
Und jetzt fügen wir ein zweidimensionales Array vom Typ int in den Vektor ein:
QVector <QVector <int> > myVector; int massive[4][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16} }; for(int i = 0; i < 4; i++) { QVector<int> tempVector; for(int j = 0; j < 4; j++) { tempVector.push_back(massive[i][j]); qDebug() << "Value " << j << ": " << tempVector.value(j); } myVector.push_back(tempVector); qDebug() << "myVector " << i << ": " << myVector.value(i); }
Und sehen wir uns die Ausgabe von qDebug () an:
Value 0 : 1 Value 1 : 2 Value 2 : 3 Value 3 : 4 myVector 0 : QVector(1, 2, 3, 4) Value 0 : 5 Value 1 : 6 Value 2 : 7 Value 3 : 8 myVector 1 : QVector(5, 6, 7, 8) Value 0 : 9 Value 1 : 10 Value 2 : 11 Value 3 : 12 myVector 2 : QVector(9, 10, 11, 12) Value 0 : 13 Value 1 : 14 Value 2 : 15 Value 3 : 16 myVector 3 : QVector(13, 14, 15, 16)
Array von 2D-Arrays mit QVector
Und wenn Sie alle zweidimensionalen Arrays wieder in Vector , speichern möchten, dann können Sie dies wie folgt tun:
QVector <QVector <QVector <int> > > myVector; int massive[4][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16} }; QVector <QVector <int> > matrix; for(int i = 0; i < 4; i++) { QVector<int> tempVector; for(int j = 0; j < 4; j++) { tempVector.push_back(massive[i][j]); qDebug() << "Value " << j << ": " << tempVector.value(j); } matrix.push_back(tempVector); qDebug() << "matrix row " << i << ": " << matrix.value(i); } myVector.push_back(matrix); qDebug() << "myVector: " << myVector.value(0);
Und sehen wir uns die Ausgabe von qDebug () an:
Value 0 : 1 Value 1 : 2 Value 2 : 3 Value 3 : 4 matrix row 0 : QVector(1, 2, 3, 4) Value 0 : 5 Value 1 : 6 Value 2 : 7 Value 3 : 8 matrix row 1 : QVector(5, 6, 7, 8) Value 0 : 9 Value 1 : 10 Value 2 : 11 Value 3 : 12 matrix row 2 : QVector(9, 10, 11, 12) Value 0 : 13 Value 1 : 14 Value 2 : 15 Value 3 : 16 matrix row 3 : QVector(13, 14, 15, 16) myVector: QVector(QVector(1, 2, 3, 4), QVector(5, 6, 7, 8), QVector(9, 10, 11, 12), QVector(13, 14, 15, 16))
Fazit
Und schließlich noch eine Möglichkeit, mit Vektoren und Arrays am Beispiel von zwei Matrizen zu arbeiten. was sich leicht von den oben genannten Methoden unterscheidet. In diesem Fall enthält die Matrix oder das zweidimensionale Array einen
QVector
QVector <QVector <int *> > matrixList; QVector <int *> matrix1; QVector <int *> matrix2; int massive1[2][4] = { {1,2,3,4}, {5,6,7,8} }; int massive2[2][4] = { {9,10,11,12}, {13,14,15,16} }; qDebug() << "Matrix 1"; for(int i = 0; i < 2; i++) { matrix1.push_back(massive1[i]); for(int j = 0; j < 4; j++) { qDebug() << "[" << i << "]" << "[" << j << "]" << matrix1.value(i)[j]; } } qDebug() << "Matrix 2"; for(int i = 0; i < 2; i++) { matrix2.push_back(massive2[i]); for(int j = 0; j < 4; j++) { qDebug() << "[" << i << "]" << "[" << j << "]" << matrix2.value(i)[j]; } } matrixList.push_back(matrix1); matrixList.push_back(matrix2); qDebug() << "Matrix 1 from matrixList"; for(int i = 0; i < 2; i++) { for(int j = 0; j < 4; j++) { qDebug() << "[" << i << "]" << "[" << j << "]" << matrixList.value(0).value(i)[j]; } } qDebug() << "Matrix 2 from matrixList"; for(int i = 0; i < 2; i++) { for(int j = 0; j < 4; j++) { qDebug() << "[" << i << "]" << "[" << j << "]" << matrixList.value(1).value(i)[j]; } }
Und sehen wir uns die Ausgabe von qDebug () an:
Matrix 1 [ 0 ] [ 0 ] 1 [ 0 ] [ 1 ] 2 [ 0 ] [ 2 ] 3 [ 0 ] [ 3 ] 4 [ 1 ] [ 0 ] 5 [ 1 ] [ 1 ] 6 [ 1 ] [ 2 ] 7 [ 1 ] [ 3 ] 8 Matrix 2 [ 0 ] [ 0 ] 9 [ 0 ] [ 1 ] 10 [ 0 ] [ 2 ] 11 [ 0 ] [ 3 ] 12 [ 1 ] [ 0 ] 13 [ 1 ] [ 1 ] 14 [ 1 ] [ 2 ] 15 [ 1 ] [ 3 ] 16 Matrix 1 from matrixList [ 0 ] [ 0 ] 1 [ 0 ] [ 1 ] 2 [ 0 ] [ 2 ] 3 [ 0 ] [ 3 ] 4 [ 1 ] [ 0 ] 5 [ 1 ] [ 1 ] 6 [ 1 ] [ 2 ] 7 [ 1 ] [ 3 ] 8 Matrix 2 from matrixList [ 0 ] [ 0 ] 9 [ 0 ] [ 1 ] 10 [ 0 ] [ 2 ] 11 [ 0 ] [ 3 ] 12 [ 1 ] [ 0 ] 13 [ 1 ] [ 1 ] 14 [ 1 ] [ 2 ] 15 [ 1 ] [ 3 ] 16
Помогите пожалуйста с вектором, не имеющим ограничений по количеству элементов. Создаю и добавляю элементы, пока не ругается компилятор.
Выделили память в куче. Обращаться к элементам нужно так.