为什么向量下标超出范围?

Why is the vector subscript out of range?

我正在尝试编写这个非常简单的加法程序以供练习。

它接收输入列表并将其存储在向量中。然后它从向量中抓取每个连续的元素并将其相加。

#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 循环开始 运行ning,然后编译器停止并吐出向量下标超出的消息范围?

我做错了什么?

如果你想遍历向量,你需要使用 i.size():

检查它有多少个元素
for (y; y < i.size(); y++) 
{
    sum = sum + i[y];
}

这是 range-based for-loops 的规范用例:

for(const auto& elem : i)
    sum += elem;

或者最好还是使用STL算法:

#include <numeric>

const auto sum = std::accumulate(i.begin(), i.end(), 0.0);

使用 sizeof 可以得到矢量的 compile-time 大小,它仅指 house-keeping 大小、容量和数据指针等内容,而不是数据本身。