Können Sie die Größe eines C ++ - Arrays nach der Initialisierung ändern?

7

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.

    
jkeys 16.04.2009, 16:18
quelle

6 Antworten

16

C ++ - Arrays sind in der Größe festgelegt.

Wenn Sie ein "resizable array" benötigen, sollten Sie stattdessen std :: vector verwenden eines Arrays.

    
Legion 16.04.2009, 16:20
quelle
4

Mein Rat ist noch stärker: Verwenden Sie std::vector<> (et. al.), es sei denn, Sie haben einen sehr guten Grund, ein C-artiges Array zu verwenden. Da Sie C ++ lernen, bezweifle ich, dass Sie einen solchen Grund haben: Verwenden Sie std::vector<> .

    
Ðаn 16.04.2009 16:45
quelle
2

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 .

    
Gregor Brandt 16.04.2009 17:26
quelle
1

Wenn Sie die Größe eines Arrays ändern möchten, möchten Sie wahrscheinlich einen Vektor verwenden, der automatisch skaliert werden kann.

    
tstenner 16.04.2009 16:21
quelle
1

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.

    
Gordon Gustafson 16.04.2009 16:52
quelle
0

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.

    
Ken 16.04.2009 17:23
quelle

Tags und Links