2014-11-10 1 views
0

Я думаю, что получаю переполнение вектора. (?) Однако я не знаю, как его решить. Упражнение, которое я пытаюсь выполнить, содержит следующее:C++ primer Chapter 3 exercise 3.20 vector over flow

Упражнение 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

Пройдите через отладчик. Обратите внимание, что вы пытаетесь сделать с вектором. – chris

+0

Как вы думаете, 'v1 + 1', когда' v1 == ivec.size() - 1'? – user657267

ответ

0

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

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