首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++入门第3章练习3.20矢量溢出

c++入门第3章练习3.20矢量溢出
EN

Stack Overflow用户
提问于 2014-11-10 10:21:50
回答 1查看 119关注 0票数 0

我想我得到了一个向量溢出。(?)然而,我不知道如何解决它。我正在尝试完成的练习说明了以下内容:

练习3.20第1部分:将一组整数读入向量。打印每对相邻元素的总和。

运行时错误的位置:

代码语言:javascript
复制
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].

整个程序的代码如下所示。

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2014-11-10 11:00:07

问题是,在最后一次迭代中,您将读取一个超过向量末尾的值。这是因为您在循环中访问ivecv1 +1,但允许v1作为最后一个元素的索引。

您可以通过将循环条件更改为(v1 < ivec.size() - 1)来修复此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26835786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档