Sie Leute diese so kompliziert sind. Natürlich können Sie dies in C++ tun. Es ist in Ordnung für ihn, ein normales Array für Effizienz zu verwenden. Ein Vektor macht nur Sinn, wenn er die endgültige Größe des Arrays nicht im Voraus kennt, d. H. Er muss im Laufe der Zeit wachsen.
Wenn Sie die Array-Größe eine Ebene höher in der Kette wissen können, eine Templat-Klasse ist die einfachste, weil es keine dynamische Zuweisung ist und keine Chance auf Speicherleck:
template < int ARRAY_LEN > // you can even set to a default value here of C++'11
class MyClass
{
int array[ARRAY_LEN]; // Don't need to alloc or dealloc in structure! Works like you imagine!
}
// Then you set the length of each object where you declare the object, e.g.
MyClass<1024> instance; // But only works for constant values, i.e. known to compiler
Wenn Sie nicht wissen, die Länge an der Stelle, an der Sie das Objekt deklarieren, oder wenn Sie dasselbe Objekt mit unterschiedlichen Längen wiederverwenden wollen, oder Sie müssen eine unbekannte Länge akzeptieren, dann müssen Sie es in Ihrem Konstruktor zuweisen und es in Ihrem Destruktor freigeben ... (und in der Theorie immer überprüfen, um sicherzustellen, dass es funktioniert ...)
class MyClass
{
int *array;
MyClass(int len) { array = calloc(sizeof(int), len); assert(array); }
~MyClass() { free(array); array = NULL; } // DON'T FORGET TO FREE UP SPACE!
}
I Wenn Sie C++ regelmäßig verwenden möchten, empfehle ich Ihnen dringend, sich mit der Standardvorlagenbibliothek vertraut zu machen. Es erleichtert das Arbeiten mit Datensammlungen * viel *. – Brian
Nebenbei, Vektoren machen es relativ einfach, mit dem Array zu arbeiten, ohne die Größe im Voraus zu kennen. Es ist nicht notwendig, die Größe im Voraus zu wissen; Sie können Elemente am Ende eines Vektors in (amortisierter) O (1) -Zeit mit push_back anhängen. – Brian
Die Verwendung von Vektoren bringt neue Probleme, da die Klasse, die ich zu vektorisieren versuche, "neue" Operatoren geschützt hat. Aber das war nicht das, was ich gefragt habe, also vergiss es. – zaratustra