当vector有6个元素时,程序打印异常数字(C ++,向量,循环)

问题描述 投票:-1回答:3

我正在编写代码并在Codecademy上学习一些C ++。我已经编写了以下代码作为使用向量的练习的一部分,我必须编写一个程序,在向量中找到偶数和和奇数的乘积

#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";

}

关于这段小代码的事情是,奇数乘积的输出是396147。

删除第6个元素会产生正确的结果,因为我看到的输出是3(这是我应该得到的输出,因为我没有更改向量中的奇数的数量)。

类似地,ADDING元素也可以让程序打印出正确的数字,这让我觉得只要我有6个元素就可以计算出向量中奇数的乘积。

请注意,无论元素的数量如何,计算向量中偶数的总和都是合适的。

不同载体的输出示例:

具有6个元素的向量:std :: vector example = {2,4,3,6,1,9}; - >奇数乘积的输出为3565323。

std :: vector example = {2,4,3,6,1,5}; - >奇数乘积的输出是1980735。

带有5个元素的向量:std :: vector example = {2,4,3,6,1}; - >奇数乘积的输出为3。

向量与7个元素:std :: vector example = {2,4,3,6,1,4,8}; - >奇数乘积的输出是1980735。

知道为什么会这样吗?谢谢。

c++ for-loop vector output
3个回答
2
投票

你的循环中有一个越界访问:

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,在容器之外。循环应该更改为

for (std::size_t i = 0; i < example.size(); i++)

好像i = example.size()example[i]产生不确定的行为。还要注意,我已经缩小了循环计数器i的范围,它可以在for循环的init-part中声明,并将其类型更改为std::size_t,这是用于索引标准库容器的实际类型。


2
投票

它应该是for (i = 0; i < example.size(); i++),因为数组/向量索引从0开始,最后一个条目有索引size()-1


-4
投票

使用向量循环中的问题,因此任何数组或向量都是从第0个索引分配并移动到(n-1)最后一个索引

include

#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";

}
© www.soinside.com 2019 - 2024. All rights reserved.