如何在C ++中添加两个数组?

时间:2013-12-14 04:11:48

标签: c++

我需要将两个数组一起添加。为什么以下如何运作?

#include <iostream>
using namespace std;
int main ()
 {   
        int sumvals[3];
        int nums[3];

        sumvals [0] = 1;
        sumvals [1] = 2;
        sumvals [2] = 3;


        for (i=0; i <= 3; i++)
        {
          sumvals[i] = sumvals[i] + numbs [i];
          cout << "the sum of the array elements is: " << sumvals << endl;

         }

4 个答案:

答案 0 :(得分:5)

首先,你的for循环是错误的。应该是i < 3,而不是<=

其次,您尚未初始化nums[]

第三,你的for循环引用了一个不存在的numbs[]

第四,永远不会声明i

第五,你在完成计算之前打印结果。

第六,实际上,你并不是在计算金额。


我觉得这更接近你想要完成的事情:

 int nums[3];
 int sumvals = 0;

 nums[0] = 1;
 nums[1] = 2;
 nums[2] = 3;

 for (int i=0; i < 3; ++i) {
     sumvals += nums[i];
 }

 cout << "the sum of the array elements is: " << sumvals << endl;

如果您尝试添加两个数组元素的值并将它们存储在数组中,语法就像:

arr1[i] = arr2[i] + arr3[i];

但是这假定已经声明了数组,并且arr2arr3已经初始化。

答案 1 :(得分:3)

总结两个数组的元素是这样的:

#include <iostream>

int main ()
{   
    int sumvals[3] = {1, 2, 3};  // initialize one array
    int nums[3]    = {5, 6, 7};  // initialize the second array

    for (i=0; i < 3; i++)
    {
       sumvals[i] += nums [i];   // aggregate the sums into the first array
    }

    // print the result:
    std::cout << "The sum of the arrays is ";
    for( i = 0; i < 3; i++) std::cout << sumvals[i] << " ";
    std::cout << std::endl;
}

答案 2 :(得分:3)

第一次使用C ++时,我的建议是:忘记C相关的所有东西,并且有C ++对应物。 在这种情况下,停止使用C风格的数组并使用std::array代替(std::vector也可以这样做但我会把它作为练习留给读者)。

好的,你想学习C ++吗?以下是使用C ++在3行代码中解决计算所有数组元素总和的问题:

#include <iostream>
#include <array>
#include <algorithm>

int main(int, char**) {   
    std::array<int, 3> nums { 1, 2, 3 };
    int sumvals = std::accumulate(std::begin(nums), std::end(nums), 0); 
    std::cout << "The sum of the array elements is: " << sumvals << std::endl;
}

解释非常简单:在第一行中,我们分配了一个由3个int类型元素组成的数组,并使用三个值1, 2, 3对其进行初始化。当然,您可以将这些值更改为其他值,或者像这样初始化它们:

std::array<int, 3> nums;
// ...
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;

这里最重要的一点是,std::array就像C风格的数组一样,但它们更强大,使用更灵活。

在第二行中,我们使用std::accumulate,一个位于<algorithm>(谁会猜到)的标准算法来计算容器所有元素的总和(在我们的例子中{{1} })。该算法非常简单,您可以将图片视为相当于:

nums

针对您自己的具体情况。它使用迭代器的唯一重大区别。什么是迭代器?嗯,这是你必须自己研究的东西。我可以向你保证,网上有很多文章和帖子可以解释它。我建议你开始from here,例如。

请记住std::begin将检索到数组的第一个元素的迭代器,std::end将计算数组的last-the-end元素的迭代器。这些函数的使用在标准算法中非常常见,您应该习惯它。

的一般思路
int init = 0;
for (int i = 0; i < 3; ++i)
    init += nums[i];
return init;

  

在初始值std::accumulate(std::begin(nums), std::end(nums), 0); 的情况下,计算从std::begin(nums)开始到std::end(nums)结束的容器的所有元素的总和。

尽可能地看到函数签名和参数非常简单。最后,在最后一行,我们打印出我们的结果(就像你之前做的那样)。

答案 3 :(得分:0)

我希望这会对你有所帮助:

#include<iostream>
using namespace std;

int add(int arr1[],int arr2[],int m,int n)
{
    int i=0,j=0,k=0,size = 0;
    if(m>n)
      size = m;
    else
      size = n;
      cout<<size<<endl;
    int res[size] = {0};
    while(i<m||j<n)
    {
        res[k++] = ((i<m)?arr1[i++]:0) +( (j<n)?arr2[j++]:0);
    }
    for(k=0;k<size;k++)
     cout<<res[k]<<" ";

}
int main()
{
    int arr1[] = {1,2,3,5,6};
    int arr2[] = {3,4,1};
    int m,n;
    m = sizeof(arr1)/sizeof(arr1[0]);
    n = sizeof(arr2)/sizeof(arr2[0]);
    add(arr1,arr2,m,n);
    return 0;
}