Summe eines Arrays in C++ berechnen
-
Verwenden Sie die Funktion
std::accumulate
, um die Summe der Array-Elemente in C++ zu berechnen -
Verwenden der Funktion
std::partial_sum
zum Berechnen von Teilsummen von Subarrays in C++
In diesem Artikel werden verschiedene Methoden zum Berechnen einer Summe von Array-Elementen in C++ erläutert.
Verwenden Sie die Funktion std::accumulate
, um die Summe der Array-Elemente in C++ zu berechnen
std::accumulate
ist Teil der numerischen Funktionen, die in der STL-Bibliothek unter der Header-Datei <numeric>
enthalten sind. std::accumulate
ist eine generische Funktion, die für die Elemente im angegebenen Bereich arbeitet. Diese wird durch die ersten beiden Argumente angegeben, die von den entsprechenden Iteratoren dargestellt werden. Das dritte Argument wird verwendet, um den Anfangswert der Summe zu übergeben, der der Literalwert des Objekts sein kann. In diesem Fall zeigen wir ein dynamisches Array von Ganzzahlen, die im Container std::vector
gespeichert sind. Beachten Sie, dass std::accumulate
optional das vierte Argument eines Objekttyps für binäre Funktionen verwenden kann, um die Additionsoperation zu ersetzen. Der zweite Aufruf von std::accumulate
im nächsten Beispielcode zeigt ein solches Szenario, mit dem einzigen Unterschied, dass die Multiplikation als binäre Operation verwendet wird.
#include <iostream>
#include <numeric>
#include <vector>
using std::accumulate;
using std::cin;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<int> arr1 = {1, 12, 13, 10, 11};
printVector(arr1);
int arr1_sum = accumulate(arr1.begin(), arr1.end(), 0);
cout << "sum of arr1 = " << arr1_sum << endl;
int arr1_product =
accumulate(arr1.begin(), arr1.end(), 1, std::multiplies<>());
cout << "product of arr1 = " << arr1_product << endl;
return EXIT_SUCCESS;
}
Ausgabe:
1, 12, 13, 10, 11,
sum of arr1 = 47
product of arr1 = 17160
Verwenden der Funktion std::partial_sum
zum Berechnen von Teilsummen von Subarrays in C++
Eine weitere nützliche numerische Funktion, die von derselben Header-Datei bereitgestellt wird, ist die Funktion std::partial_sum
, die die Unterbereiche im angegebenen Bereich summiert. Die Funktion bietet eine ähnliche Schnittstelle wie die vorherige, außer dass das dritte Argument der Startiterator des Bereichs sein sollte, in dem die berechneten Zahlen gespeichert werden. In diesem Fall überschreiben wir die vorhandenen Vektorelemente mit den summierten Ergebnissen. Beachten Sie, dass die benutzerdefinierte Binäroperation auch mit std::partial_sum
angegeben werden kann, um die Standardoption - Addition zu ändern.
#include <iostream>
#include <numeric>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<int> arr1 = {1, 12, 13, 10, 11};
printVector(arr1);
std::partial_sum(arr1.begin(), arr1.end(), arr1.begin());
printVector(arr1);
std::partial_sum(arr1.begin(), arr1.end(), arr1.begin(), std::multiplies());
printVector(arr1);
return EXIT_SUCCESS;
}
Ausgabe:
1, 13, 26, 36, 47,
1, 13, 338, 12168, 571896,
Alternativ können diese Funktionen auch verwendet werden, um bitweise Operationen zwischen den Elementen in dem gegebenen Bereich durchzuführen. Das folgende Codefragment XORs beispielsweise die vector
-Elemente und speichert die Ergebniswerte im gleichen Bereich.
#include <iostream>
#include <numeric>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<int> arr1 = {1, 12, 13, 10, 11};
printVector(arr1);
std::partial_sum(arr1.begin(), arr1.end(), arr1.begin(), std::bit_xor());
printVector(arr1);
return EXIT_SUCCESS;
}
Ausgabe:
1, 13, 0, 10, 1,
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook