Учебник для начинающих c ++, глава 3, упражнение 3.20.

0

Я думаю, что получаю переполнение вектора. (?) Однако я не знаю, как его решить. Упражнение, которое я пытаюсь завершить, гласит следующее:

Упражнение 3.20 Часть 1: Прочитайте набор целых чисел в вектор. Распечатайте сумму каждой пары соседних элементов.

местоположение ошибки времени выполнения:

for (int sum; v1 < ivec.size();++v1){  //executes for statement as long as v1 < ivec.size() is true.
    sum = ivec[v1] + ivec[v1 + 1]; // same as sum = ivec[0] + ivec[1].
    cout << sum << endl; sum = 0; // prints the result of sum = ivec[v1] + ivec[v1 + 1].

Код для всей программы приведен ниже.

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;

int main(){
vector<int> ivec;
decltype (ivec.size()) v1 = 0;
unsigned int i1 = 0;

while (cin >> i1){ ivec.push_back(i1);} // receive input and stores into ivec.

for (int sum; v1 < ivec.size();++v1){  //executes for statement as long as v1 < ivec.size() is true.
    sum = ivec[v1] + ivec[v1 + 1]; // same as sum = ivec[0] + ivec[1], v1 is now = 1.
    cout << sum << endl; sum = 0; // prints the result of sum = ivec[v1] + ivec[v1 + 1].
}

system("pause");
return 0;
}
  • 0
    Шаг с отладчиком. Обратите внимание, что вы пытаетесь сделать с вектором.
  • 0
    Как вы думаете, v1 + 1 , когда v1 == ivec.size() - 1 ?
Теги:
vector

1 ответ

0

Проблема в том, что вы прочитаете один за концом своего вектора в самой последней итерации. Это связано с тем, что вы обращаетесь к ivec [v1 + 1] в цикле, но v1 разрешено быть индексом последнего элемента.

Вы можете исправить это, изменив условие цикла (v1 <ivec.size() - 1).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню