我正在尝试编写这个非常简单的加法程序进行练习。
它接受输入列表并将其存储在 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/