Hej! Det beror lite på vad du menar med "array", eftersom detta är så olika i C++. Jag allokerar en dynamisk array som pekar på en klass. Två detaljer bara (för framtida labbar) : Du behöver inte "kopiera till en temporär pekare, omdimensionera, å sen kopiera tillbaka".Ändra storlek på en array??
Jag vill ändra storleken på en Array i run-time, men vill ha kvar värdena i arrayen. Går det? De dokument jag hittat säger att det inte går utan man måste spara undan värden, skapa nya arrayen, skriva tillbaka. Detta går så smidigt i VB med ReDim preserve! Hoppas det finns ett lika enkelt sätt i C++.
*Hoppas*
MVH
//PeterSv: Ändra storlek på en array??
Om du har en vanlig array; en
int Array[10];
går det inte.
Har du istället en dynamiskt allokerad, dvs en
int Array[];
eller
int *Array;
Så går det, men bara på det sättet som du beskriver själv.
I och med att du skriver C++ så kan (och bör) du använda klassen "vector" istället.
I det fallet kan du omdimensionera den samtidigt som du behåller värdena.
/Niklas JanssonSv: Ändra storlek på en array??
Jag fick göra som jag själv förslog, att kopiera till en temporär pekare, omdimensionera, å sen kopiera tillbaka.... detta funkar så jag är nöjd... det var bara en labb så inget större projekt.
Tack iaf!
//SuneSv: Ändra storlek på en array??
Gör bara en ny pekare och kopiera dit dem.
DinKlass *pArray;
...
DinKlass *pTemp;
pTemp = new DinKlass[iNyttAntal]
for(size_type iNu=0; iNu<iGammaltAntal; iNu++)
pTemp[iNu] = pArray[iNu];
delete pArray[];
pArray=pTemp;
Ett annat - mycket effektivare - alternativ hade varit att ha arrayer till pekare:
DinKlass **ppArray;
...
DinKlass **ppTemp;
ppTemp = new *DinKlass[iNyttAntal]
for(size_type iNu=0; iNu<iGammaltAntal; iNu++)
ppTemp[iNu] = ppArray[iNu]; //Kopierar bara adressen
//osäker på om dessa raderna skall vara exakt så här. Du fattar principen.
delete ppArray [];
ppArray=ppTemp;
Sedan är det ofta bättre med en vector<DinKlass> istället.
/Niklas Jansson