c++ - 为什么 vector 下标超出范围?

标签 c++ for-loop vector addition accumulate

我正在尝试编写这个非常简单的加法程序进行练习。
它接受输入列表并将其存储在 vector 中。然后,它从 vector 中抓取每个连续的元素并将其求和。

#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循环开始运行,然后编译器停止并吐出 vector 下标超出范围的消息?
我做错什么了?

最佳答案

如果要遍历 vector ,则需要使用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);
使用sizeof为您提供 vector 的编译时大小,该 vector 仅指看家的东西,例如其大小,容量和数据指针,而不是数据本身。

关于c++ - 为什么 vector 下标超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63484184/

相关文章:

c++ - 堆栈对象被插入到容器中?

C++ 使用 using 关键字避免派生类中的动态调度

c++ - 稳定的时钟在系统范围内稳定吗?

c++ - SFML 网络错误 : undefined references des when linking

c++ - 从 vector 中删除项目,而在 C++11 范围 'for' 循环中?

algorithm - 循环运行日志时间时的复杂性

ios - 使用循环生成 uisegmentedcontrol 按钮

c++ - 无法在 Qt 6.3 中加载 Qt5Compat.GraphicalEffects 模块

c++ - 构造函数错误,打印出 'a',然后在崩溃前打印出一个三角形

c++ - 当我在 C++ 中将 vector 与类一起使用时会发生什么