schnelle listen



  • hi,
    ich suche eine schnelle liste die zeiger speichert!
    habe schon CPtrList ausprobiert, war aber nicht so das wahre!
    gibt es denn keine statistiken darüber, welche listen am wenigsten rechenzeit benötigen?

    danke,
    c++ junky



  • std::list?

    Wozu brauchst du die Liste? Listen haben nicht die schnellsten Zugriffszeiten. Dafür kann man Objekte an beliebiger Stelle immer mit dem gleichen, geringen Aufwand entfernen oder Einfügen.
    Ansonsten denke drüber nach, obs auch std::vector tut.



  • Was willst du denn besonders häufig in der Liste machen? An Standard-Containern gibt es zur Auswahl: Vector, Deque (Elementzugriff in konstanter Zeit, Einfügen/Löschen i.d.R. linear), List (Elementzugriff linear, Einfügen/Löschen konstant) oder Set/Multiset (die meisten Operationen logarithmisch).



  • ich benötige die liste um elemente einzufügen, zu löschen und vorallem um die liste wieder schnell zu durchlaufen



  • einfügen/löschen ist das nur am Ende, oder beliebieg? Wie oft findet das statt? Dauernd oder nur ab und an?
    Kann man die Größe (ca.) abschätzen?
    Für schnelles durchlaufen brauchst du ein Array. Wenn du aber die Anzahl der Element weist, irgednwie ausrechnen oder abschätzen kannst, kannst du ja die physikalische Größe des Array vorher festlegen und es dann füllen. Da bietet sich *TADA* std::vector an.



  • In einer std::list kann man auch recht schnell alle Elemente durchlaufen (nur wenn du ein bestimmtes Element irgendwo in der Mitte der Liste benötigst, dauert es etwas länger).



  • die elemente werden sehr oft durchlaufen, sprich bei jedem neuzeichnen des fensters
    und die größe weiß ich nicht, denn der dau fügt elemente zu oder löscht sie wieder.
    einfügen einfügen ans ende, löschen beliebig



  • CStoll schrieb:

    In einer std::list kann man auch recht schnell alle Elemente durchlaufen (nur wenn du ein bestimmtes Element irgendwo in der Mitte der Liste benötigst, dauert es etwas länger).

    Liste ist trotzdem langsamer als ein Array beim durchlaufen.

    @junky: befass dich mal mit den Standardcontainern. WEnn es wirklich sehr oft durchlaufen wird, würde ich vector tendieren. Aber wenn du ensprechend Programmierst mit den Containern, kannst du das auch einfach mal austesten, was schneller bei dir ist(du scheinst das ja schon implementiert zu haben?)
    Die Schnittstellen der STL-Container sind nämlich zu einem großen Teil gleich(vor allem Liste und Vector). Da reicht es, wenn du den Deklarationstyp änderst um den Container zu tauschen( + Iteratoren natürlich).



  • ok ich werd das ma austesten!
    danke euch


Anmelden zum Antworten