#include <iostream> #include <vector> int main() { //Declaring variables int i, sum = 0; int product = 1; std::vector<int> example = {2,4,3,6,1,8}; //Loop for calculations for (i = 0; i < example.size(); i++) { if (example[i] % 2 == 0) { sum = sum + example[i]; } else { product = product * example[i]; } } std::cout << "Sum of even numbers: " << sum << "\n"; std::cout << "Product of odd numbers: "<< product << "\n"; }
使用向量循环中的问题,因此任何数组或向量都是从第0个索引分配并移动到(n-1)最后一个索引
你的循环中有一个越界访问:
for (i = 0; i <= example.size(); i++) // ^^ this is the bug
因为这是索引的工作原理:
std::vector<int> example = {2, 4, 3, 6, 1, 8}; // indices: 0 1 2 3 4 5
显而易见的是 example.size() ,是的 6 在这个例子中,是在容器之外。循环应该更改为
example.size()
6
for (std::size_t i = 0; i < example.size(); i++)
仿佛 i = example.size() , example[i] 产生未定义的行为。请注意,我已经缩小了循环计数器的范围 i ,可以在for循环的init-part中声明,并将其类型更改为 std::size_t ,这是用于索引标准库容器的实际类型。
i = example.size()
example[i]
i
std::size_t
它应该是 for (i = 0; i < example.size(); i++) 因为数组/向量索引开始于 0 最后一个条目有索引 size()-1 。
for (i = 0; i < example.size(); i++)
0
size()-1