Клас 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
Помогите пожалуйста с вектором, не имеющим ограничений по количеству элементов. Создаю и добавляю элементы, пока не ругается компилятор.
Выделили память в куче. Обращаться к элементам нужно так.