stl->accumulate



  • edit:
    hi,

    eine frage steht als kommentar im code und die zweite unterm code 😉

    #include <iostream>
    #include <numeric>
    #include <vector>
    
    using namespace std;
    
    int average(const vector<int>& array)
    {
        int avrg = 0;
        avrg = accumulate(array.begin(), array.end(), avrg);   //Wozu das "avrg" in der Argumentenliste?
    
        return (avrg / array.size());
    }
    
    int main()
    {
        vector<int> array(10);
    
        for(int i = 0; i<10; ++i)
            array[i] = i+1;
    
        cout<<average(array);
    
        return 0;
    }
    

    es wird zwar einwandfrei kompiliert, allerdings stürzt das programm ab.
    danke

    [ Dieser Beitrag wurde am 29.05.2003 um 18:59 Uhr von Kräuterkundestudent editiert. ]

    [ Dieser Beitrag wurde am 29.05.2003 um 19:17 Uhr von Kräuterkundestudent editiert. ]



  • T accumulate(InputIterator first, InputIterator last, T init);

    Summiert init und die Elemente in [first,last) mit +.
    http://www.math.uni-wuppertal.de/~axel/skripte/oop/oopC.html



  • wo kommen die fehlermeldungen her?

    std::accumulate erwartet wie alle std-Algorithmen die auf Bereichen arbeiten, zwei Iteratoren. Einen auf das erste zu bearbeitende Element und einen auf eins hinter das letzte Element der Sequenz:

    avrg = accumulate(array.begin(), array.end(), avrg);
    

    //Wozu das "avrg" in der Argumentenliste?

    std::accumulate sieht so aus:

    template<class InIt, class T>
        T accumulate(InIt first, InIt last, T val);
    

    Solange first != last wird der Ausdruck val += *first gebildet.

    Der dritte Parameter ist also der Startwert für deine Summation.



  • [ Dieser Beitrag wurde am 29.05.2003 um 19:18 Uhr von elise editiert. ]



  • Ich geb auf 😃



  • es wird zwar einwandfrei kompiliert, allerdings stürzt das programm ab.

    Und das wundert dich?

    vector<int> array;

    for(int i = 0; i<10; ++i)
    array[i] = i+1;

    Fällt dir was auf? Stichwort Speicher?



  • Original erstellt von Kräuterkundestudent:
    **```
    vector<int> array;

    for(int i = 0; i<10; ++i)
        array[i] = i+1;
    

    Du greifst hier auf Elemente ausserhalb des Vektors zu. Besser so:

    vector<int> array(10);
    for (int i = 0; i < 10; ++i)
      array[i] = i+1;
    

    geht auch:

    vector<int> array;
    array.reserve(10); // optional, für Performance
    for (int i = 0; i < 10; ++i)
      array.push_back(i+1);
    


  • grins 🙂



  • Original erstellt von HumeSikkins:
    [quote] es wird zwar einwandfrei kompiliert, allerdings stürzt das programm ab.

    **
    Und das wundert dich?

    vector<int> array;

    for(int i = 0; i<10; ++i)
    array[i] = i+1;

    Fällt dir was auf? Stichwort Speicher?**[/QUOTE]
    oh nein
    lol
    mein god! gott sei dank bin ich im forumanonym 😃
    k, danke trotzdem 😉


Anmelden zum Antworten