Es ist zwar möglich, hierfür Arrays zu verwenden, aber C++ hat eine bessere Lösung zu bieten. Versuchen Sie für den Anfang std::vector
ist ein ausreichender Allzweckcontainer, der auf einem dynamisch zugewiesenen Array basiert. Er verhält sich in vielen Fällen genau wie ein Array.
In Bezug auf Ihr Problem gibt es jedoch zwei Nachteile von Arrays oder Vektoren:
- Indizes müssen 0-basiert und zusammenhängend sein; Sie können keine Elemente aus der Mitte entfernen, ohne dass die Schlüssel/Wert-Zuordnungen für alle Elemente nach dem entfernten Element verloren gehen; wenn Sie also den Spieler auf Position 4 entfernen, wird der Spieler von Position 9 auf Position 8 verschoben
- Zufälliges Einfügen und Löschen (d.h. überall außer am Ende) ist teuer - O(n), d.h. die Ausführungszeit wächst linear mit der Arraygröße. Das liegt daran, dass jedes Mal, wenn Sie einfügen oder löschen, ein Teil des Arrays verschoben werden muss.
Wenn die Sache mit dem Schlüssel/Wert für Sie nicht wichtig ist, und Einfügen/Löschen ist nicht zeitkritisch, und Ihr Container wird nie wirklich groß sein, dann verwenden Sie auf jeden Fall einen Vektor. Wenn Sie eine zufällige Einfüge-/Löschleistung benötigen, aber die Schlüssel/Wert-Sache nicht wichtig ist, sehen Sie sich std::list
(obwohl Sie dann keinen zufälligen Zugriff erhalten, d.h. die []
Operator ist nicht definiert, da seine Implementierung für verknüpfte Listen sehr ineffizient wäre; verknüpfte Listen sind auch sehr speicherhungrig, mit einem Overhead von zwei Zeigern pro Element). Wenn Sie Schlüssel/Wert-Zuordnungen beibehalten wollen, std::map
ist Ihr Freund.