Уменьшите a для l oop на вектор - PullRequest
0 голосов
/ 08 мая 2020

Мой инструктор хочет, чтобы мы уменьшили от 5 до -4, используя для l oop, а затем p sh этих чисел на вектор. Не понимаю, почему не убывает. Компилятор говорит: std::out_of_range

The for l oop, очевидно, работает без задействованного вектора, однако я не понимаю, почему он не работает с ним ...?

int main() {

vector<int> number;

for (int i = 5; i >= -4; --i){

    number.push_back(i);
    cout << number.at(i) << endl;

}
}

Любая помощь будет оценена

Ответы [ 2 ]

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

l oop уменьшает штраф. Ваше использование векторного метода at() просто неправильно. Вы получаете ошибку времени выполнения, потому что числа, которые вы вводите в вектор, не являются допустимыми индексами в векторе, поэтому вы действительно выходите за пределы. at() выполняет проверку границ, генерируя исключение std::out_of_range, если запрошенный индекс < 0 или >= size().

Сначала заполните вектор, ЗАТЕМ отобразите его содержимое, например:

int main() {

    vector<int> numbers;

    for (int num = 5; i >= -4; --i){
        numbers.push_back(num);
    }

    for (size_t i = 0; i < numbers.size(); ++i){
        cout << numbers[i] << endl;
    }

    /* or, in C++11 and later:
    for (int num : numbers){
        cout << num << endl;
    }
    */
}
2 голосов
/ 08 мая 2020

Здесь вы объединяете две вещи: первая - это значения, которые вы поместили в вектор. Второй - это положение элементов в векторе.

Если вы удалите строку cout << number.at(i) << endl;, она должна работать без ошибки, а в конце l oop у вас будет вектор с 10 элементами: 5 4 3 2 1 0 -1 -2 -3 -4.

Но когда вы говорите at(i), вы запрашиваете элемент в определенной позиции в векторе. Если эта позиция находится за пределами диапазона [0.. size of vector), тогда at вызовет исключение.

(Позже) Если вы хотите распечатать только что добавленный элемент, то v.back() даст вы последний элемент в векторе.

...