我需要将两个数组一起添加。为什么以下如何运作?
#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;
}
答案 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];
但是这假定已经声明了数组,并且arr2
和arr3
已经初始化。
答案 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;
}