Evgenii Legotckoi
Жел. 23, 2015, 11:07 Т.Қ.

Qt/C++ - Сабақ 037. QVector көмегімен екі өлшемді массив

QVector класы контейнерлік сыныптарға жатады және индекс бойынша элементтерге қол жеткізуді, сондай-ақ ыңғайлы болу үшін бірқатар қосымша әдістерді қамтамасыз етеді.

QVector класының данасы негізінен нысандардың бір өлшемді массиві болып табылады. Екі өлшемді массивді Вектор ретінде көрсеткіңіз келсе, QVector данасын жасауға болады, онда QVector. басқа даналары болады.

QVector бар бір өлшемді массив

Алдымен, int: типті бір өлшемді массивді Векторға сақтайық

  1. QVector <int> myVector;
  2.  
  3. int massive[4] = {1, 2, 3, 4};
  4.  
  5. for(int i = 0; i < 4; i++)
  6. {
  7. myVector.push\_back(massive[i]);
  8. qDebug() << "Value " << i << ": " << myVector.value(i);
  9. }

Және qDebug() шығысын қараңыз:

  1. Value 0 : 1
  2. Value 1 : 2
  3. Value 2 : 3
  4. Value 3 : 4

QVector ішіндегі 2D массиві

Ал енді Векторға int типті екі өлшемді массивті салайық:

  1. QVector <QVector <int> > myVector;
  2.  
  3. int massive[4][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16} };
  4.  
  5. for(int i = 0; i < 4; i++)
  6. {
  7. QVector<int> tempVector;
  8.  
  9. for(int j = 0; j < 4; j++)
  10. {
  11. tempVector.push\_back(massive[i][j]);
  12. qDebug() << "Value " << j << ": " << tempVector.value(j);
  13. }
  14. myVector.push\_back(tempVector);
  15. qDebug() << "myVector " << i << ": " << myVector.value(i);
  16. }

Және qDebug() шығысын қараңыз:

  1. Value 0 : 1
  2. Value 1 : 2
  3. Value 2 : 3
  4. Value 3 : 4
  5. myVector 0 : QVector(1, 2, 3, 4)
  6. Value 0 : 5
  7. Value 1 : 6
  8. Value 2 : 7
  9. Value 3 : 8
  10. myVector 1 : QVector(5, 6, 7, 8)
  11. Value 0 : 9
  12. Value 1 : 10
  13. Value 2 : 11
  14. Value 3 : 12
  15. myVector 2 : QVector(9, 10, 11, 12)
  16. Value 0 : 13
  17. Value 1 : 14
  18. Value 2 : 15
  19. Value 3 : 16
  20. myVector 3 : QVector(13, 14, 15, 16)

QVector бар 2D массивтерінің массиві

Егер сіз барлық екі өлшемді массивтерді қайтадан Vector , ішінде сақтағыңыз келсе, оны келесідей орындауға болады:

  1. QVector <QVector <QVector <int> > > myVector;
  2.  
  3. int massive[4][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16} };
  4.  
  5. QVector <QVector <int> > matrix;
  6.  
  7. for(int i = 0; i < 4; i++)
  8. {
  9. QVector<int> tempVector;
  10.  
  11. for(int j = 0; j < 4; j++)
  12. {
  13. tempVector.push\_back(massive[i][j]);
  14. qDebug() << "Value " << j << ": " << tempVector.value(j);
  15. }
  16. matrix.push\_back(tempVector);
  17. qDebug() << "matrix row " << i << ": " << matrix.value(i);
  18. }
  19.  
  20. myVector.push\_back(matrix);
  21.  
  22. qDebug() << "myVector: " << myVector.value(0);

Және qDebug(): шығысын қараңыз

  1. Value 0 : 1
  2. Value 1 : 2
  3. Value 2 : 3
  4. Value 3 : 4
  5. matrix row 0 : QVector(1, 2, 3, 4)
  6. Value 0 : 5
  7. Value 1 : 6
  8. Value 2 : 7
  9. Value 3 : 8
  10. matrix row 1 : QVector(5, 6, 7, 8)
  11. Value 0 : 9
  12. Value 1 : 10
  13. Value 2 : 11
  14. Value 3 : 12
  15. matrix row 2 : QVector(9, 10, 11, 12)
  16. Value 0 : 13
  17. Value 1 : 14
  18. Value 2 : 15
  19. Value 3 : 16
  20. matrix row 3 : QVector(13, 14, 15, 16)
  21. myVector: QVector(QVector(1, 2, 3, 4), QVector(5, 6, 7, 8), QVector(9, 10, 11, 12), QVector(13, 14, 15, 16))

Қорытынды

Соңында, екі матрица мысалында векторлармен және массивтермен жұмыс істеудің тағы бір жолы. бұл жоғарыда аталған әдістерден біршама ерекшеленеді. Бұл жағдайда матрицада немесе екі өлшемді массивте бір QVector болады . Өз кезегінде QVector векторы > барлық матрицалардың тізімін қамтиды.

  1. QVector <QVector <int *> > matrixList;
  2. QVector <int *> matrix1;
  3. QVector <int *> matrix2;
  4.  
  5. int massive1[2][4] = { {1,2,3,4}, {5,6,7,8} };
  6. int massive2[2][4] = { {9,10,11,12}, {13,14,15,16} };
  7.  
  8. qDebug() << "Matrix 1";
  9. for(int i = 0; i < 2; i++)
  10. {
  11. matrix1.push\_back(massive1[i]);
  12. for(int j = 0; j < 4; j++)
  13. {
  14. qDebug() << "[" << i << "]" << "[" << j << "]" << matrix1.value(i)[j];
  15. }
  16. }
  17.  
  18. qDebug() << "Matrix 2";
  19. for(int i = 0; i < 2; i++)
  20. {
  21. matrix2.push\_back(massive2[i]);
  22. for(int j = 0; j < 4; j++)
  23. {
  24. qDebug() << "[" << i << "]" << "[" << j << "]" << matrix2.value(i)[j];
  25. }
  26. }
  27.  
  28. matrixList.push\_back(matrix1);
  29. matrixList.push\_back(matrix2);
  30.  
  31. qDebug() << "Matrix 1 from matrixList";
  32. for(int i = 0; i < 2; i++)
  33. {
  34. for(int j = 0; j < 4; j++)
  35. {
  36. qDebug() << "[" << i << "]" << "[" << j << "]" << matrixList.value(0).value(i)[j];
  37. }
  38. }
  39.  
  40. qDebug() << "Matrix 2 from matrixList";
  41. for(int i = 0; i < 2; i++)
  42. {
  43. for(int j = 0; j < 4; j++)
  44. {
  45. qDebug() << "[" << i << "]" << "[" << j << "]" << matrixList.value(1).value(i)[j];
  46. }
  47. }

Және qDebug(): шығысын қараңыз

  1. Matrix 1
  2. [ 0 ] [ 0 ] 1
  3. [ 0 ] [ 1 ] 2
  4. [ 0 ] [ 2 ] 3
  5. [ 0 ] [ 3 ] 4
  6. [ 1 ] [ 0 ] 5
  7. [ 1 ] [ 1 ] 6
  8. [ 1 ] [ 2 ] 7
  9. [ 1 ] [ 3 ] 8
  10. Matrix 2
  11. [ 0 ] [ 0 ] 9
  12. [ 0 ] [ 1 ] 10
  13. [ 0 ] [ 2 ] 11
  14. [ 0 ] [ 3 ] 12
  15. [ 1 ] [ 0 ] 13
  16. [ 1 ] [ 1 ] 14
  17. [ 1 ] [ 2 ] 15
  18. [ 1 ] [ 3 ] 16
  19. Matrix 1 from matrixList
  20. [ 0 ] [ 0 ] 1
  21. [ 0 ] [ 1 ] 2
  22. [ 0 ] [ 2 ] 3
  23. [ 0 ] [ 3 ] 4
  24. [ 1 ] [ 0 ] 5
  25. [ 1 ] [ 1 ] 6
  26. [ 1 ] [ 2 ] 7
  27. [ 1 ] [ 3 ] 8
  28. Matrix 2 from matrixList
  29. [ 0 ] [ 0 ] 9
  30. [ 0 ] [ 1 ] 10
  31. [ 0 ] [ 2 ] 11
  32. [ 0 ] [ 3 ] 12
  33. [ 1 ] [ 0 ] 13
  34. [ 1 ] [ 1 ] 14
  35. [ 1 ] [ 2 ] 15
  36. [ 1 ] [ 3 ] 16

Осы тақырып бойынша ұсынылатын мақалалар

Мақала бойынша сұралады3сұрақтар(лар)

3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

М
  • Қар. 3, 2017, 6:51 Т.Қ.

Помогите пожалуйста с вектором, не имеющим ограничений по количеству элементов. Создаю и добавляю элементы, пока не ругается компилятор.

 QVector<double>*Open1=   new QVector<double>;
 Open1->append(5); Open1->append(6);
При этом не работает так Open1[0]=7; Также при попытке вывода Open1[0] выдает ошибку. Скажите пожалуйста, где у меня ошибка?
Evgenii Legotckoi
  • Қар. 4, 2017, 4:20 Т.Қ.

Выделили память в куче. Обращаться к элементам нужно так.

Open1->at(0);
Open1->at(1);
М
  • Қар. 7, 2017, 1:35 Т.Қ.
Open1->at(5); Open1->at(6); Сделал так, при запуске вырубается скрипт.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз