Integer Array
-
Hi all
int* pInt = new int[3]; int* pInt[0] = 5; int* pInt[1] = 10; int* pInt[2] = 15; delete pInt;
Kann ich die Summe aller Werte im Array bestimmen, ohne einen for-loop? Wenn ja, Wie?
Danke!
-
rewe schrieb:
ohne einen for-loop? Wenn ja, Wie?
Ja, z.B mit einer while schleife
Nein, du wirst nicht drum rumkommen, alle Elemente abzufragen.
-
mit accumulate ?
-
rewe schrieb:
int* pInt = new int[3]; int* pInt[0] = 5; int* pInt[1] = 10; int* pInt[2] = 15; delete pInt;
Moderne Kunst? Mal von den Syntaxfehlern abgesehen, sollte die letzte Anweisung delete [] pInt heißen. Du allokierst ein Array, also musst du auch ein Array freigeben.
-
@Gast: OK, geht dann wohl nur über loop...
@Braun: accumulate ist STL... wird wohl kaum funktionieren
@Hume: Den Fehler bei delete mach ich weg
-
accumulate ist STL... wird wohl kaum funktionieren
Warum nicht?
Hast du die * bei den Zuweisungen auch entfernt?
-
Braunstein schrieb:
mit accumulate ?
Was macht denn accumulate? Bestimmt auch nichts anderes als durchlaufen und aufaddieren?
-
Das ist schon richtig. In seinem Quelltext taucht aber keine Schleife mehr auf und das wollte er ja.
-
[cpp]
#include <iostream>
#include <functional>
#include <numeric>using namespace std;
template<typename T>
inline T sum(T* array, int start, int ende)
{
return accumulate(array+start, array+ende, static_cast<T>(0), plus<T>());
}int main(int argc, char *argv[])
{
int n = 3, *pInt = new int[n];
double *pDouble;pInt[0] = 5;
pInt[1] = 10;
pInt[2] = 15;cout<< sum(pInt, 0, n) <<endl;
delete**[]** pInt;n = 2;
pDouble = new double[n];pDouble[0] = 1.4;
pDouble[1] = .7;cout<< sum(pDouble, 0, n) <<endl;
delete**[]** pDouble;system("PAUSE");
}
[/cpp]Beachte vor allem delete**[]**. Ohne die eckigen Klammern wird nur der Speicher für das erste Element freigegeben!
-
Danke! Funktioniert! Einzeiler!