Array erweiter, zurückgeben
-
Hallo, ich wollte eine eingabe in ein Array (startgröße 5) machen, und wenn mehr eingeben wird, das er dann vergrößert, nun meine frage, wie kann ich ein int array per funktion vergrößern?
Mein versuch geht nciht:
int* resize(int* array,int &size) { int safe=size; size=size*size; int *temp=array; temp= new int[size]; for (int i=0;i<safe;i++) temp[i]=array[i]; delete[] array; return temp; }; int main(int argc, char* argv[]) { int size=5; int test; int *arr = new int[5]; int i=0; do { cin>>test; if(i>=size) arr=resize(arr,size); arr[i]=test; }while(test!=0); cout<<"Ausgabe"<<endl; for(int j=0;j<size;j++) cout<<arr[j]<<endl; getch(); return 0; }
da kommen nur komische zahlen bei der ausgabe raus!
wie geht es richtig?
-
Kann es sein, dass resize nie aufgerufen wird? Immerhin wird i nirgendwo inkrementiert, ergo kann i auch nie größer als size werden.
-
ok thx, das hab ich übersehen, aber das array erweitert er jetzt, leider stehen immer nur 0en drinne!
-
Ist std::vector keine Option für dich? Der wird automatisch erweitert, wenn man Sachen hinten dranhängt. Die gesamte Fehlerhafte resize Funktion könntest du dir dann sparen.
-
ich bin noch am lernen, und bin noch nicht bei dem vector zeugs....
-
Also bei mir funktioniert es, allerdings steht in den nicht initialisierten Werten des Arrays Mist drin. Was auch durchaus nachvollziehbar ist
-
oh ja stimmt, bei mir auch, wie geht das mit den 0en noch weg?
-
also wenns du nur anzeigen willst, machs doch so:
for(int j=0;j<size;j++) { if(arr[j]!=0) cout<<arr[j]<<endl; else{} }
-
Sigmapoint schrieb:
oh ja stimmt, bei mir auch, wie geht das mit den 0en noch weg?
Entweder merkst du dir wieviel in dem Array steht oder du initialisierst das Array mit einem Wert, der nicht eingegeben werden darf. Wenn der erste dieser Werte auftaucht, ist das Array "zuende" und du gehst mit break aus der schleife.
-
hm...und wie kann ich immer das ganze array initialisieren, geht doch nur in schleife oder?