Класс QVector относится к контейнерным классам и обеспечивает доступ к элементам по индексу, а также ряд дополнительных методов для удобства работы.
Экземпляр класса QVector по сути является одномерным массивом объектов. Если требуется задать в виде Вектора двумерный массив, то можно создать экземпляр QVector, который будет содержать другие экземпляры QVector.
Одномерный массив с помощью QVector
Для начала сохраним в Вектор одномерный массив типа int:
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); }
И посмотрим вывод qDebug() :
Value 0 : 1 Value 1 : 2 Value 2 : 3 Value 3 : 4
Двумерный массив в QVector
А теперь поместим в Вектор двумерный массив типа int :
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); }
И посмотрим вывод qDebug() :
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)
Массив двумерных массивов с помощью QVector
И если хочется хранить все двумерные массивы опять же в Вектор , то можно сделать следующим образом:
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);
И посмотрим вывод qDebug():
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))
Заключение
И в заключение ещё один способ поработать с Векторами и массивами на примере двух матриц. который несколько отличается от выше приведённых способов. В данном случае матрицу или двумерный массив будет содержать один
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]; } }
И посмотрим вывод qDebug():
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
Помогите пожалуйста с вектором, не имеющим ограничений по количеству элементов. Создаю и добавляю элементы, пока не ругается компилятор.
Выделили память в куче. Обращаться к элементам нужно так.