c++ - 为什么向量下标超出范围?
问题描述
我正在尝试编写这个非常简单的加法程序以供练习。
它接受输入列表并将其存储在向量中。然后它从向量中抓取每个连续的元素并将其相加。
#include <iostream>
#include <vector>
int main()
{
std::vector<int> i;
int input;
int sum = 0;
int y = 0;
while (std::cin >> input && input != 0000) {
i.push_back(input);
}
for (y; y < sizeof(i); y++) {
sum = sum + i[y];
}
std::cout << sum;
}
但是,当我编译并运行程序时,它可以正常工作,直到 for 循环开始运行,然后编译器停止并吐出向量下标超出范围的消息?
我做错了什么?
解决方案
如果要遍历向量,则需要检查它使用了多少个元素i.size()
:
for (y; y < i.size(); y++)
{
sum = sum + i[y];
}
这是基于范围的 for 循环的典型用例:
for(const auto& elem : i)
sum += elem;
或者最好还是使用 STL 算法:
#include <numeric>
sum = std::accumulate(i.begin(), i.end(), sum);
Usingsizeof
为您提供了向量的编译时大小,它仅指的是诸如大小、容量和数据指针之类的内部事务,而不是数据本身。
推荐阅读
- javascript - d3 数据解析/转换(从长到宽)
- css - 如何将我的单个菜单背景与 wordpress 中的 css 垂直对齐(垂直对齐中间不起作用)
- angular - 从路由器 URL 获取 ID
- vue.js - HighCharts Vue JS - CSV 键
- php - 使用 php 在文本文件中搜索
- reactjs - 如何设置子组件而不在父组件中渲染?
- ios - 通过短信发送和接收 iOS 应用数据
- php - 如何允许用户从 WordPress 网页搜索我的数据库
- php - [Route: 缺少必需的参数:
- php - get_post_meta 和 add_post_meta 在 wordpress 中不起作用