2013-12-14 4 views
0

Мне нужно добавить два массива вместе. Почему следующие действия работают?Как добавить два массива вместе на 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; 

     } 
+3

Не могли бы вы пояснить, что вы подразумеваете под «добавлением двух массивов вместе»? Например, если у меня есть {1, 2, 3}, и я добавляю это с {1, 1, 1}, должен ли результат быть {2, 3, 4} или должен быть результатом 9? Или вы имеете в виду нечто большее, чем {1, 2, 3} + 5 = {6, 7, 8}? Или {1, 2, 3, 4} = 10? – chwarr

ответ

5

Во-первых, ваш цикл не соответствует действительности. Должно быть 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.

+0

, а пятый вы печатаете результат, прежде чем закончите его вычислять. – Floris

+0

правильный ответ, но другой вопрос, что относительно отрицательных точек репутации. Они все еще активны. – Diversity

+1

Его вопрос заключается в том, как объединить элементы двух массивов (т. Е. 'Sum [i] = array1 [i] + array2 [i]'), а не суммировать элементы одного массива в одно значение. –

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; 
} 
3

При работе с C++ в первый раз, мое предложение: забудьте все, что C связаны и имеет ++ аналог C. В этом случае остановите использование массивов в стиле C и используйте вместо этого std::array (то же самое можно сделать с помощью std::vector, но я оставлю его как упражнение для чтения).

Хорошо, вы хотите изучить C++? Вот как ваша проблема, вычисления суммы всех элементов массива, могут быть решены в 3-х строк кода с использованием C++:

#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> (кто бы мог подумать), чтобы вычислить сумму всех элементов контейнера (в нашем случае nums).Алгоритм довольно прост и вы можете представить себе как эквивалент:

int init = 0; 
for (int i = 0; i < 3; ++i) 
    init += nums[i]; 
return init; 

для вашего собственного конкретного случая. Единственное большое отличие в том, что он использует итераторы вместо. Что такое итераторы? Ну, это то, что вам придется исследовать самостоятельно. Я могу гарантировать, что в Интернете есть много статей и сообщений, которые объяснят это. Например, я предлагаю вам начать from here.

Просто помните, что std::begin будет извлекать итератор в первый элемент массива, а std::end рассчитает итератор на элемент конца массива. Использование этих функций довольно распространено со стандартными алгоритмами, и вы должны привыкнуть к нему. Общие идеи

std::accumulate(std::begin(nums), std::end(nums), 0); 

является

Вычислить сумму всех элементов контейнера, начиная с std::begin(nums) и заканчивая (исключая) std::end(nums), учитывая начальное значение 0.

Как вы можете видеть, подпись функции и параметры довольно прямолинейны. И, наконец, в последней строке мы распечатываем наш результат (точно так же, как мы это делали раньше).

0

Чтобы добавить остальные ответы, если вы хотите добавить два массива вместе и просто написать arr1 + arr2 или arr1 += arr2, я думаю, что эти C++ 11 решения OK:

template<typename T, unsigned long N> 
array<T, N>& operator+=(array<T, N>& thi, const array<T, N>& oth) { 
    for (int i = 0; i < N; ++i) 
     thi.at(i) += oth.at(i); 
    return thi; 
} 

template<typename T, unsigned long N> 
array<T, N> operator+(const array<T, N>& a, const array<T, N>& b) { 
    array<T, N> sum = a; 
    sum += b; 
    return sum; 
} 
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; 
} 
+0

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, как и/или почему он решает проблему, улучшит долгосрочную ценность ответа. –

+0

ok Дональд .. Я позабочусь ... Спасибо –

Смежные вопросы