Hoe de grootte van de array in C++ te wijzigen?

Ik moet het equivalent van de volgende C #–code in C++

doen

Array.Resize(ref A, A.Length - 1);

Hoe dit in C++ bereiken?


Antwoord 1, Autoriteit 100%

De grootte van een array is statisch in C++. Je kunt het niet dynamisch veranderen. Dat is wat std::vectoris voor:

std::vector<int> v; // size of the vector starts at 0
v.push_back(10); // v now has 1 element
v.push_back(20); // v now has 2 elements
v.push_back(30); // v now has 3 elements
v.pop_back(); // removes the 30 and resizes v to 2
v.resize(v.size() - 1); // resizes v to 1

Antwoord 2, Autoriteit 98%

U kunt de array niet wijzigen, u kunt alleen nieuwe (met een grotere maat) toewijzen en de inhoud van de oude array kopiëren.
Als u niet wilt gebruiken std::vector(om een ​​of andere reden) hier is de code eraan:

int size = 10;
int* arr = new int[size];
void resize() {
    size_t newSize = size * 2;
    int* newArr = new int[newSize];
    memcpy( newArr, arr, size * sizeof(int) );
    size = newSize;
    delete [] arr;
    arr = newArr;
}

Code is vanaf hier http://www.cplusplus.com/forum/general/11111 / .


Antwoord 3, Autoriteit 7%

  1. Gebruik std::vector
    of
  2. Schrijf uw eigen methode. Wijs het geheugen toe met behulp van nieuw. Met dat geheugen kunt u uitbreiden tot de limiet van het geheugenblok.

Antwoord 4

RAW-arrays worden niet opgelost in C++.

Je zou zoiets als een Vectorklasse moeten gebruiken die het formaat wel toestaat. .

Met

std::vectorkunt u het formaat wijzigen en dynamisch vergroten/verkleinen wanneer u elementen toevoegt (vaak is het handmatig wijzigen van het formaat niet nodig voor het toevoegen).


Antwoord 5

Dat kun je niet doen, zie de antwoorden van deze vraag.
U kunt in plaats daarvan std:vectorgebruiken.

Other episodes