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