Verständnissproblem: Dynamische Arrays



  • std::vector<int> foo;
    std::sort(foo.begin(), foo.end());
    


  • Sollte es dann so funktionieren?

    #include <iostream>
    #include <vector>
    #include <stdlib.h>
    
    using namespace std;
    int main()
    {
        vector<int> foo(5);
        for (size_t i=0;i<foo.size();i++)
        {
            cin >> foo.at(i);
        }
        std::sort(foo.begin(), foo.end());
        for (size_t i=0;i<foo.size();i++)
    {
        cout << foo.at(i);
    }
    system("pause");
    return 0;
    }
    

    Oder mach ich es mir nun zu einfach? Er sagt mir das sort kein Teil von "std" ist.

    LG



  • Für jeden Bestandteil der STL benötigst du den richtigen Header - die Algorithmen wie sort() brauchen z.B. <algorithm>.



  • WOHA GEIL x.x

    Ich bedanke mich herzlichst bei euch, ihr habt mir super geholfen!!!

    Nun kann ich mir endlich dieses blöde bubblesort sparen, vielen vielen Dank!!! 🙂



  • Und morgen geht er in der Schule und merkt, dass sein Lehrer nur

    int *irgendeinarray = new int[irgendwas];
    

    wollte und nichtmal weiss was std:: überhaupt bedeuten soll 😃

    Er schrieb ja schon im Eingangspost, dass sein Lehrer bei der Frage nach "Vector" überfragt war.



  • TravisG schrieb:

    ...
    Er schrieb ja schon im Eingangspost, dass sein Lehrer bei der Frage nach "Vector" überfragt war.

    Besser so als andersherum. Vielleicht gehört der Lehrer ja zu der Sorte, der merkt, dass da irgendwas passiert ist, seit er das letzte Mal in ein C++ Buch geguckt hat. Und vielleicht gehört er sogar zu der ganz seltenen Sorte, die sich dann hinsetzen und sich das auch mal angucken.

    On topic:
    Der Code ist zwar standesgemäßer C++ Code und löst die Aufgabe, aber das ist vielleicht gar nicht die Zielsetzung der Aufgabe. Wenn es um Verständnis und Realisierung dynamischer Speicherverwaltung geht, dann geht die Lösung komplett an der Aufgabe vorbei, weil vector ja alles kapselt und für den TE erledigt. Wie der TE ja schon zugegeben hat, hat er Probleme beim Verständnis von Zeigern, könnte also keine Fragen zur Funktionsweise beantworten, weil vector eine Black Box für ihn ist.

    @TE
    Du solltest trotzdem versuchen, eine Lösung ohne std::vector hinzubekommen, damit du verstehst, wie dynamische Speicherverwaltung prinzipiell funktioniert. Wenn du dann noch die Vorzüge des vectors gegenüber der C-Fassung erklären kannst wäre das natürlich das Sahnehäubchen.

    Ich habe noch zwei Kritikpunkte:

    1. Der korrekte C++ Header ist cstdlib, nich stdlib.h
    2. system() ist eine plattformabhängige Funktion (würde mich persönlich aber nicht stören, wenn ich sowas lese)

  • Mod

    DocShoe schrieb:

    1. system() ist eine plattformabhängige Funktion (würde mich persönlich aber nicht stören, wenn ich sowas lese)

    [klugscheiß]"system" ist plattformunabhängig, "pause" ist es nicht. [/klugscheiß]
    🤡



  • Huhu!

    Leider hatte ich bei der Vorstellung des programms das problem das ich nicht wusste wie man die Ausgabe nun so sortiert, das es mit der Größten anfängt und mit der kleinsten aufhört o.o

    Geht das überhaupt? Nur in eine Richtung sortieren wäre nämlich kacke!

    Naja abgesehen davon kam mein Programm recht gut an, außer das der Kligscheißer der Klasse von mir genaustens erklärt haben wollte wie die vector Bibliothek aufgebaut ist und wie das sortieren da eig. funktioniert, denn ich kann da ja nicht einfach benutzen ohne zu wissen wie es funktioniert.

    Naja ich hab ihn dann gefragt (Alle vor der Klasse natürlich) wie iostream eig. funktioniert, benutzt er ja auch in jedem Programm. Danach hat er komischerweise die Klappe gehalten :3


  • Mod

    Limatex schrieb:

    Huhu!

    Leider hatte ich bei der Vorstellung des programms das problem das ich nicht wusste wie man die Ausgabe nun so sortiert, das es mit der Größten anfängt und mit der kleinsten aufhört o.o

    Geht das überhaupt? Nur in eine Richtung sortieren wäre nämlich kacke!

    Natürlich geht das. Sortieralgorithmen nehmen noch einen weiteren Parameter an, bei dem man das Vergleichskriterium festlegen kann. Das kann auch std::greater sein.

    Naja ich hab ihn dann gefragt (Alle vor der Klasse natürlich) wie iostream eig. funktioniert, benutzt er ja auch in jedem Programm. Danach hat er komischerweise die Klappe gehalten :3

    Dabei wäre das gut zu wissen. Viele Anfänger wissen nicht, wie mächtig die Streams sind und was man für tolle Sachen damit machen kann. Man schaue sich die Beiträge von Werner Salomon dazu an, die mich immer wieder begeistern.



  • SeppJ schrieb:

    Natürlich geht das. Sortieralgorithmen nehmen noch einen weiteren Parameter an, bei dem man das Vergleichskriterium festlegen kann. Das kann auch std::greater sein.

    kann man nicht auch einfach ein paar von reverse-iteratoren nehmen? das wäre jetzt mein spontaner Ansatz (okay, eine Ecke denken mehr wäre das schon als std::greater...)

    Aber noch eine Sache:
    ich begrüße zwar, dass du vector.at(i) verwendest, aber meistens reicht dann doch der Klammerzugriff wie bei den arrays: vector[i]. dann siehts nicht ganz so unbeholfen aus 🙂


  • Mod

    otze schrieb:

    SeppJ schrieb:

    Natürlich geht das. Sortieralgorithmen nehmen noch einen weiteren Parameter an, bei dem man das Vergleichskriterium festlegen kann. Das kann auch std::greater sein.

    kann man nicht auch einfach ein paar von reverse-iteratoren nehmen? das wäre jetzt mein spontaner Ansatz (okay, eine Ecke denken mehr wäre das schon als std::greater...)

    Stimmt. Kommt halt drauf an, was man will. Man sollte generell so sortieren, wie man am häufigsten Durchiterieren will. Abundan mal rückwärts gehen, da sind die reverse_iteratoren gut. Ich könnte mir aber vorstellen, dass die nicht besonders performant sind, so von wegen Prefetching und so. Jedoch wird das bei der hier gezeigten Applikation wohl kaum in's Gewicht fallen.



  • Limatex schrieb:

    Naja abgesehen davon kam mein Programm recht gut an, außer das der Kligscheißer der Klasse von mir genaustens erklärt haben wollte wie die vector Bibliothek aufgebaut ist und wie das sortieren da eig. funktioniert, denn ich kann da ja nicht einfach benutzen ohne zu wissen wie es funktioniert.

    Du kannst ihm gerne die Header <vector> und <algorithm> vor die Nase knallen, damit er es selber herausfindet 😃



  • Zumindes wie man die Standardbibliothek *benutzt* kann man auch hier herausfinden: http://www.cplusplus.com/reference/.


Anmelden zum Antworten