Ich lerne programmieren, und C ++ ist meine erste Sprache. Benutzt keine Zeiger, um es mir zu zeigen - ich verstehe sie noch nicht und werde mich nicht darum kümmern, bis ich mehr Zeit habe, mich dafür zu widmen.
%Vor%Ich wurde zugewiesen (ich nehme keine Kurse - ich lerne nur mit ein paar Freunden, die mir helfen), einen Merge-Sort-Algorithmus, wobei der Algorithmus erklärt wird, aber nicht die Implementierung. Ich möchte das so umschreiben, dass es sowohl für ungerade als auch für ganze Zahlen funktioniert. Ich habe versucht, diesen Code hinzuzufügen:
%Vor%Damit könnte ich die gleiche Ganzzahl verwenden, um über beide nachfolgenden Arrays zu iterieren. Eine Größe von (Farray) zeigt 16 Bytes oder 4 ganze Zahlen an. Es ändert also nicht die Größe. Was ich wissen möchte - ist es möglich, Arrays nach der Initialisierung zu skalieren?
Bearbeiten: Wie würde ich einen Vektor implementieren? Ich verstehe nicht, wie Iteratoren in einer Schleife verwendet werden, um die Werte zu iterieren und zu kopieren.
C ++ - Arrays sind in der Größe festgelegt.
Wenn Sie ein "resizable array" benötigen, sollten Sie stattdessen std :: vector verwenden eines Arrays.
Ich würde auch std::vector
empfehlen. Wenn Sie jedoch mit einem Array festgefahren sind, können Sie immer malloc
des Speichers und dann realloc
, wenn Sie das Array größer machen müssen.
Suchen Sie hier auf SO, es gibt Informationen über malloc
und realloc
.
Sie können den Operator [] mit einem Vektor genauso verwenden wie in einem Array. Sie könnten dies mit einem Vektor in etwa so implementieren (wenn Sie mehr Vektormethoden verwenden wollten):
%Vor%Sie können auch .at (index) verwenden, um dem Vektorzugriff Grenzen hinzuzufügen.
Wenn Sie wissen wollen, warum Ihre erste Idee kompiliert wurde, aber nicht zu funktionieren scheint:
Wenn Sie geschweifte Klammern in einer if-Anweisung weglassen:
%Vor%Es ist genauso, als hätten Sie sie benutzt:
%Vor%Es macht also einen 'farray' von der richtigen Größe - und dann geht es sofort aus dem Rahmen und ist weg, und Sie sind nur mit dem Original übrig.