为什么向量下标超出范围?
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 大小、容量和数据指针等内容,而不是数据本身。
我正在尝试编写这个非常简单的加法程序以供练习。
它接收输入列表并将其存储在向量中。然后它从向量中抓取每个连续的元素并将其相加。
#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 大小、容量和数据指针等内容,而不是数据本身。