Dynamischen Array Werte zuweisen
-
Hallo,
ich versuche grade mit mehr oder weniger dynamischen Arrays zu arbeiten, bin aber leider auf ein, zwei Probleme gestoßen:int *values=0; values=new int[4]; values[0]=1; values[1]=4; values[2]=17; values[3]=25;
Kann man die Werte hier irgendwie weniger umständlich zuweisen? (Und ja, durch die Größenangabe 4 ist es vermutlich nicht mehr wirklich dynamisch, oder? Aber das ist nur derweil zu Testzwecken)
Und noch eine Frage: Wie funktioniert es, wenn ich jetzt ein weiteres "dynamisches" Array habe, dass ich dem einen Array Werte des anderen zuweise?
Ich habe es mit array1[i]=array2[i] und einer Schleife, die i durchzählt, versucht, erhalte aber die Fehlermeldung:"invalid types âint[int]â for array subscript"
Das Gleiche, wenn ich versuche, einen Vergleich wie array1[i]==0 zu machen, selbe Fehlermeldung.
Ich hoffe, jemand weiß Rat
Liebe Grüße,
Charlie
-
Wenn du C++ für dich lernst, dann sage ich dir, vergiß das ganz schnell wieder und merke dir: Wann immer du denkst du brauchst
new[]
, brauchst du in Wirklichkeitstd::vector
. Ich sage jetzt einfach mal,new[]
ist böse und man handelt sich schnell Fehler ein,std::vector
ist lieb und man handelt sich keine Fehler ein. Das Ganze sieht dann so aus:std::vector<int> vec(4); // Eine direkte Initialisierung ist, wie bei deinem Konstrukt, leider nicht möglich. for(int i=0; i<vec.size(); ++i) vec.push_back(i); std::vector copy = vec; if( vec[1]==copy[1] ) cout << "sehr gut";
Wenn du es aber für Klausuren wissen musst, dann melde dich nochmal.
edit: Danke an wxSkip.
-
Das dynamische Array in C++ ist
std::vector
.
Siehe http://www.cplusplus.com/reference/stl/vector/,
oder google einfach mal C++ std::vector.Das ginge alles dann ganz einfach so:
std::vector<int> array = { 1, 4, 17, 25 }; //array enthaelt nun diese werte von 0 bis 3 for(unsigned i = 0; i < array.size(); ++i) std::cout << array[i] << " "; //kannst ganz normal mit [] zugreifen std::vector<int> array2 = array; //kopiert den inhalt von array nach array2. kinderleicht.
-
@Gugelmoser: Du meinst vermutlich eher new[].
In C++11 könnte man sich mit std::initializer_list vermutlich eine etwas kürzere Initialisierung basteln (wie die Initialisierung von vector bei Incocnito), aber wenn du spezielle Werte zuweisen willst, die einen etwas größeren Umfang annehmen, wird das meistens sowieso aus einer Datei gelesen oder automatisch generiert.
Kannst du mal den Code, der deinen Fehler verursacht, posten?
-
Gibt es einen tieferen Grund, nicht std::vector zu benutzen? (Der einzige akzeptable Grund wäre eigene Übung)
Hier könntest du natürlich auch gleich alle Dynamik weglassen, das 4 nicht gerade dynamisch ist.
Zur Frage: Falls dein Compiler es schon kann, gibt es in C++11 eine vereinheitlichte Initialisierungssyntax, sowohl für Arrays wie auch für die Container der STL (und auch für alle anderen Datentypen, wenn man sie entsprechend ausrüstet):
int *foo = new int[4]{1,2,3,4}; vector<int> bar{1,2,3,4};
In reinem C++98 musst du bei den Einzelzuweisungen bleiben oder eine Kopie eines statisch initialisieren Arrays machen, z.B.:
int foo[]={1,2,3,4}; vector<int> bar(foo, foo+4);
-
Gugelmoser schrieb:
Wenn du C++ für dich lernst, dann sage ich dir, vergiß das ganz schnell wieder und merke dir: Wann immer du denkst du brauchst
new
, brauchst du in Wirklichkeitstd::vector
. Ich sage jetzt einfach mal,new
ist böse und man handelt sich schnell Fehler ein,std::vector
ist lieb und man handelt sich keine Fehler ein. Das Ganze sieht dann so aus:std::vector<int> vec(4); // Eine direkte Initialisierung ist, wie bei deinem Konstrukt, leider nicht möglich. for(int i=0; i<vec.size(); ++i) vec.push_back(i); std::vector copy = vec; if( vec[1]==copy[1] ) cout << "sehr gut";
Wenn du es aber für Klausuren wissen musst, dann melde dich nochmal.
Sorry, habe mich wohl nicht so gut ausgedrückt
Nein, ich lerne es nicht für mich selbst, keine Sorge.. das Problem ist, wir sollen "new" verwenden, ich wollte jetzt mal "im Kleinen" ausprobieren, wie es gehen könnte, aber es funktioniert leider nicht so wirklich. Ich würde es eh nicht verwenden, wenn ich nicht müssteDas Problem ist jetzt, ich weiß nicht, wie ich mit diesem Vergleiche oder auch Zuweisungen machen kann
EDIT EDIT :
Ich glaube, ich habe es hinbekommen!!
Danke für eure Bemühungen!
-
int &values
ist eine Referenz auf einen int, das ist kein Zeiger auf einen Arrayanfang. Herzlichen Glückwunsch zu einem Lehrer, der euch zwingt, new[] zu benutzen, aber solche Grundlagen nicht richtig lehrt. Da merkt man gleich, dass der nur ganz modernes C++ lehrt. Du Armer
.
edit: Ach, jetzt hast du den Code wegeditiert, auf den sich meine Antwort bezog.
-
SeppJ schrieb:
int &values
ist eine Referenz auf einen int, das ist kein Zeiger auf einen Arrayanfang. Herzlichen Glückwunsch zu einem Lehrer, der euch zwingt, new[] zu benutzen, aber solche Grundlagen nicht richtig lehrt. Da merkt man gleich, dass der nur ganz modernes C++ lehrt. Du Armer
.
edit: Ach, jetzt hast du den Code wegeditiert, auf den sich meine Antwort bezog.
Dank dir, ich bin eben vorher drauf gekommen, dass es daran lag
Naja wir hatten leider nicht viel Zeit; haben alles im Eiltempo durchgenommen und ich habe / hatte leider vorher keine Vorbildung im Bereich von C++, daher tue ich mir jetzt noch immer schwer, vor allem wenn es "komplexer" wird