Почему я получаю сообщение об ошибке «вектор вне допустимого диапазона»? - PullRequest
0 голосов
/ 06 мая 2020

Когда я пытаюсь запустить свой код, он компилируется нормально, но во время выполнения выдает ошибку вектора вне допустимого диапазона. Может ли кто-нибудь мне помочь?

Я написал свой код в Xcode:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int numOfRows = 0;
    cout << "Enter number of rows: ";
    cin >> numOfRows;
    vector<vector<int>> vec;
    int sizeOfAnotherArray = 0;
    int value = 0;

    for (int i = 0; i < numOfRows; i++) {
        cout << "Enter size of another array: ";
        cin >> sizeOfAnotherArray;
         vec.resize(numOfRows,vector<int>(sizeOfAnotherArray));
        for (int j = 0; j < sizeOfAnotherArray; j++) {
            cout << "Store Value: ";
            cin >> value;
            vec.at(i).at(j) = value;
        }
    }

    for (int i = 0; i < numOfRows; i++) {
        for (int j = 0; j < sizeOfAnotherArray; j++) {
            cout << vec.at(i).at(j) << " ";
        }
        cout << "\n";
    }

    return 0;
}

1 Ответ

3 голосов
/ 06 мая 2020

Странность вашего кода заключается в том, что вы вводите sizeOfAnotherArray несколько раз и, следовательно, несколько раз меняете размер всего массива. Но учтите, что вы меняете только количество строк. Каждая добавляемая строка будет иметь последний размер, но более ранние строки сохранят исходный размер.

Это означает, что если одно из более поздних значений для sizeOfAnotherArray больше, чем одно из более ранних значений, то вы вы получите ошибку вне допустимого диапазона, потому что предыдущая строка все равно будет иметь меньший размер. Он создает рваный массив , который представляет собой массив, в котором количество столбцов зависит от того, в какой строке вы находитесь.

cout << "Enter number of rows: ";
cin >> numOfRows;
vector<vector<int>> vec(numRows); // create array with N rows

for (int i = 0; i < numOfRows; i++) {
    cout << "Enter size of another array: ";
    cin >> sizeOfAnotherArray;
    vec.at(i).resize(sizeOfAnotherArray); // resize this row only
    for (int j = 0; j < sizeOfAnotherArray; j++) {
        ...
    }

for (int i = 0; i < vec.size(); i++) {
    for (int j = 0; j < vec.at(i).size(); j++) { // loop on the size of this row
        cout << vec.at(i).at(j) << " ";
    }
    cout << "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...