CTypedPtrArray: operator[] vs. getAt/ElementAt
-
ich benutze das Pointer Array "CTypedPtrArray" und wie ich sehe kann ich auf einlene Elemente entweder über "operator[]" oder getAt() bzw. ElementAt() zugreifen... macht das ein unterschied??
-
Afair macht GetAt() im Gegensatz zu [] eine Bereichsüberschreitungsprüfung.
-
wird in der CTypetPtrArray Klasse intern mit einem Array[] oder dynamischen liste gearbeitet??
-
Welchen Sinn würde denn CTypedPtrList machen, wenn CTypedPtrArray intern mit einer Liste arbeiten würde?
Bei VC6 basiert CTypedPtrArray mW auf CObArray und CTypedPtrLIst auf CObList.
-
GetAt liefert den Wert aus dem Array. ElementAt liefert die Referenzt auf den Wert im Array. operator[] verwendet bei const Objekten GetAt, bei nicht const Objekten ElementAt!
-
was ist ist effizneter? hat ein CPtrArray oder CPtrList ne höhere Preformance hinsichtlich traversieren?
-
BorisDieKlinge schrieb:
was ist ist effizneter?
Kann man pauschal nicht sagen, weil das auch von den (in deiner konkreten Anwendung) benötigten Operationen abhängt. (vergleiche auch std::vector vs. std::list - vector bietet schnellen Direktzugriff auf seine Elemente, list kann schneller "umgebaut" werden)
hat ein CPtrArray oder CPtrList ne höhere Preformance hinsichtlich traversieren?
Da dürften sie sich in der Geschwindigkeit nicht viel nehmen. Aber miss es doch einfach aus, wenn du sicher sein willst? (viele Objekte in die Liste/Array packen und dann stoppen, wie lange du für die Ausgabe brauchst)
@Jencas: Bei den CTypedPtrXXX Klassen kannst du angeben, auf welche Basisklasse sie aufsetzen sollen - laut MSDN mußt du dort entweder CObXXX oder CPtrXXX angeben.
-
BorisDieKlinge schrieb:
was ist ist effizneter? hat ein CPtrArray oder CPtrList ne höhere Preformance hinsichtlich traversieren?
Ein CObArray/std::vector ist mit Sicherheit schneller als ein CObList/std::list!
Aber das nimmt sich nicht viel. Problematischer wäre hier: Wie oft werden Reallokationen des Arrays nötig? Wie wächst/schrumpft die Datenmenge?
-
Martin Richter schrieb:
Ein CObArray/std::vector ist mit Sicherheit schneller als ein CObList/std::list!
Als pauschale Aussage ist das mit Sicherheit falsch (sonst wäre CObList bzw. std::list schon längst abgeschafft worden). Es kommt immer auf die konkrete Anwendung an, welche Variante besser ist.
Und im Beispiel "Daten traversieren" dürfte es keinen wesentlichen Unterschied machen, welche Datenstruktur du verwendest (natürlich darfst du nicht versuchen, Index-Zugriff auf die Listenelemente nachzubauen).