2014-11-15 26 views
11

Zamiast wpisywaćJak dodać wszystkie liczby w tablicy w C++?

array[0] + array[1] //.....(and so on) 

Czy istnieje sposób, aby dodać wszystkie liczby w tablicy? Językiem, którego używam, będzie C++ Chcę móc to zrobić z mniejszą liczbą liter, niż gdybym tylko napisał to wszystko.

+6

'std :: accumulate' robi tylko to, co jest napisane na puszce, co jest jednym z powodów, aby używać go na pętli. – chris

+0

Dla wektorów: http://stackoverflow.com/questions/3221812/sum-of-elements-in-a-stdvector –

Odpowiedz

4

Spróbuj tego:

int array[] = {3, 2, 1, 4}; 
int sum = 0; 

for (int i = 0; i < 4; i++) { 
    sum = sum + array[i]; 
} 
std::cout << sum << std::endl; 
+4

Powinieneś wyjaśnić swoją odpowiedź. ich jest wiele odpowiedzi na te pytania są dostępne i są oznaczone jako zaakceptowane –

3

Najprostszy sposób, jaki mogę zobaczyć, to użycie pętli. Bonusem jest to, że możesz go użyć na dowolnej tablicy całkowitej bez przepisywania wielu kodów. Używam Java częściej, więc mam nadzieję, że nie ma zbyt wiele błędów składniowych, ale coś jak to powinno działać:

int addArray(int[] array, int length){ 
    int sum=0; 
    for(int count=0;count<length;count++){ 
     sum+=array[count]; 
    } 
    return sum; 
} 
+0

Dla C++ "int [] array" musi być "int * array". W przeciwnym razie działa dobrze. Możesz dodać, że tworzysz funkcję, która używa pętli, więc w przyszłości mogą po prostu wywołać addArray() – Scooter

+0

@Scooter, Te dwa są równoważne kompilatorowi w tym kontekście. – chris

+0

@chris Patrz bliżej. Robią to w Javie - "int [] array" - nie "int array []". Ale tak, powinienem był użyć "int array []", ponieważ jest jaśniejszy niż "int * array". – Scooter

9

że masz int array[N].

Można po prostu zrobić:

int sum = 0; 
for(auto& num : array) 
    sum += num; 
+0

O wiele czystsze niż kumulowanie, zakładając, że masz wsparcie C++ 11 i nie wymaga dwóch dodatkowych elementów. – jbo5112

+0

Używając krótkich nazw zmiennych, golfy te są lepsze niż akumulacja (nawet bez uwzględnienia załączników). Jedyną zaletą akumulacji jest chyba sama dokumentacja? –

+2

@Ciro: To nie jedyna zaleta akumulacji. Jeśli masz 'int array [100];' i sortujesz jej część w ten sposób 'sort (a, a + n);', rozwiązanie z akumulacją pozwala mi utworzyć jednoliniowe piękne sumowanie: 'int revenue = kumulować (a, a + min (m, n), 0); ". Możesz wyszukać kod, w którym go użyłem: [codeforces.com - Sereja and Coat Rack] (http://codeforces.com/contest/368/submission/12620328) – Pixar

30

Oto idiomatyczne sposób to zrobić w C++:

int a[] = {1, 3, 5, 7, 9}; 
int total = accumulate(begin(a), end(a), 0, plus<int>()); 

Demo.

+10

Warto zauważyć, że dodatek jest domyślny. – chris

+2

Warto również zauważyć, że dla typów innych niż "int", trzeci argument musi być 0 odpowiedniego typu, np. 0.0 przy sumowaniu "podwójnych". –

+0

Nie wiem, dlaczego i kiedy to się zmieniło, ale musiałem "#include ", aby to działało. [Cppreference.com] (http://en.cppreference.com/w/cpp/algorithm/accumulate) to potwierdza. – evertheylen

4

Jeśli używasz valarray, istnieje funkcja członek sum().

#include <iostream>  // std::cout 
#include <valarray>  // std::valarray 

int main() { 
    std::valarray<int> myvalarray(4); 
    myvalarray[0] = 0; 
    myvalarray[1] = 10; 
    myvalarray[2] = 20; 
    myvalarray[3] = 30; 
    std::cout << "The sum is " << myvalarray.sum() << '\n'; 

    return 0; 
} 
0

w C++ 17, można używać krotnie wyrażeń:

template<typename ...Ts> 
int sum_impl(Ts&& ...a) 
{ 
    return (a + ...); 
} 

Jeśli sum_impl miał stałą liczbę parametrów, możemy nazwali go tak:

std::apply(sum_impl, arr); 

przy założeniu, że arr jest std::array<int, N>. Ale ponieważ jest to o zmiennej liczbie argumentów, potrzebuje trochę pchania i pomocników:

using namespace std; 

template <class Array, size_t... I> 
int sum_impl(Array&& a, index_sequence<I...>) 
{ 
     return sum_impl(get<I>(forward<Array>(a))...); 
} 

template <class Array> 
int sum(Array&& a) 
{ 
     return sum_impl(forward<Array>(a), 
         make_index_sequence<tuple_size_v<decay_t<Array>>>{}); 
} 

Dlatego zakładając te pomocników są na swoim miejscu, kod będzie wyglądać następująco:

template<typename ...Ts> 
int sum_impl(Ts&& ...a) 
{ 
    return (a + ...); 
} 

int main() 
{ 
    array<int, 10> arr{0,1,2,3,4,5,6,7,8,9}; 
    cout << sum(arr) << "\n"; 
    return 0; 
} 
0

Możemy wykorzystać zdefiniowana przez użytkownika funkcjonować.

Code Snippet:

#include<bits/stdc++.h> 
using namespace std; 


int sum(int arr[], int n) 
{ 
    int sum=0; 

    for(int i=0; i<n; i++) 
    { 
     sum += arr[i]; 
    } 
    return sum; 
} 


int main() 
{ 
    int arr[] = {1, 2, 3, 4, 5}; 
    int n = distance(begin(arr), end(arr)); 

    int total = sum(arr,n); 

    printf("%d", total); 

    return 0; 
}