for-Schleife
-
Hallo zusammen
Kurze Anfängerfrage:
Bei einer Funktion mit dieser for Schleife übergebe ich 6 Container.Wie ist es möglich bei folgendem Code, anstatt 6 Mal für jeden Container diese for zu schreiben, mit einer andere Möglicheit den entsprechenden Container aufzurufen? (Die Container heissen ContainerZ1, ContainerZ2 usw. bis Z6)
Ich dachte im Sinne wie int Aufrufer = 1; und dann nach jedem for Durchlauf, Aufrufer++;
Und im for-Kopf würde ich schreiben pContainerZAufrufer.
Aber so meint er ja, dies sei der ganze Name..aber wie kann ich jetzt zeigen, dass Aufrufer die Variable ist, und nicht zum Namen gehört?for(int Zeile = 0; Zeile < pContainerZ1->size(); Zeile++)
Besten Dank
PS: Entschuldigung für die vielleicht verwirrenden Sätze, war bisschen schwierig zu erklären.
-
pack die Container selbst wieder in einen Container und übergib den an die Funktion
-
Pack deine Objekte in ein Array oder vector und mach eine zweite for-Schleife drumrum!
Beispiel:
for(int i=0;i<anzahlContainer;i++) { for(int j=0;j<arrayContainer[i].size();j++) { //... } }
EDIT: Oder eben statt der inneren for-Schleife eine Funktion, die diese beinhaltet. Hab's nur halb gelesen, sorry...
-
Genau diese Idee hatte ich auch und wollte gleich hier frgaen wie das geht
aber dann kam mir in den Sinn, wie ich dann in den Inhalt von den Containern, welche im Gesamt Container wären rankomme mittels dieser for-Schleife.
Könntest du, oder jemand anderes, mir dies erläutern, wie dies ablaufen würde?
Ist im Moment noch unklar für mich dies zu verstehen, wie das möglich wäre.
Besten Dank
-
Gut ich verstehe nicht ganz vorauf du hinaus willst, aber ich hab verstanden das:
Du versucht mit einer for Schleife 6 Container durch zu gehen ohne den gleiche code 6mal zu coden, warum machst du keine einfache Funktion?void ContainerSchleife(Container C) { for(int Zeile = 0; Zeile < C->size(); Zeile++) { // Do Stuff } }
C ist das Container objekt was du über gibts , also in diesem falle
pContainerZ1
, ich hab da in den Funktionskopf Container geschrieben, weil ich nicht weis welche Art von Container du verwendest...
Mfg Wikinger75!
-
Danke schon mal.
Nun die andere Frage.
Wie packe ich den Container in einen Container?
Z.B hätte ich es so gemacht:
(alle 6 sind vector container von int)CIntContainer SudokuZahlenContainerZ1; CIntContainer GesamtContainer; GesamtContainer.push_back(SudokuZahlenContainerZ1);
Und dies dann für jeden der 6 container, aber so gehts nicht.
Wie muss ich das machen?Danke vielmals
-
Ich weiss jetzt nicht, was das alles für Typen sind, aber so geht das:
#include <vector> .. std::vector< std::vector< int > > GesamtContainer; //entweder so füllen GesamtContainer.push_back ( std::vector< int > (2,2 ) ); //oder so: std::vecto< int > SudokuZahlenContainerZ1; SudokuZahlenContainerZ1.push_back ( 2 ); SudokuZahlenContainerZ1.push_back ( 3 ); GesamtContainer.push_back ( SudokuZahlenContainerZ1 );
Du siehst, dass der GesamtContainer von einem anderen Typen ist, als die, die er hält. (Ist auch logisch). Es ist halt ein Container von Container von int.
Alles klar?
-
Ehm..blöde Frage, aber was bedeuten die Zahlen in den Klammern?
Besten Dank
-
Der ctor von std::vector übernimmt Anzahl und Wert für die Initialisierung. (unter anderem)
http://www.cplusplus.com/reference/stl/vector/vector.html
-
Irgendwie blicke ich nicht durch..:S
Also die Vectoren habe ich im h-filetypedef std::vector<std::string> CStringContainer; typedef std::vector<int> CIntContainer, CGesamtContainer;
Aber die Klasse selber ist noch leer, Code zuerst einmal im main file..
und dort sin die Container wie folgt:CIntContainer SudokuZahlenContainerZ1; CIntContainer SudokuZahlenContainerZ2; CIntContainer SudokuZahlenContainerZ3; CIntContainer SudokuZahlenContainerZ4; CIntContainer SudokuZahlenContainerZ5; CIntContainer SudokuZahlenContainerZ6; CGesamtContainer GesamtContainer;
Und von deinem Beispiel konnte ich nicht richtig ableiten, wie ich dies im main coden muss, um die 6 SudokuZahlenContainer von CIntContainer in den Gesamt Container von CGesamtContainer zu packen..
Kannst du mir nochmals helfen?
Vielen Dank
-
typedef std::vector<int> CIntContainer; typedef std::vector<CIntContainer> CGesamtContainer;
So besser klar?
CGesamtContainer hält ja eine Zahl von CIntContainer, also musst du auch so einen vector erstellen.
Und zum einfügen musst du beim push_back einfach einen Container vom Typ CIntContainer übergeben:
CGesamtContainer gesamt; CIntContainer con; //ein paar Werte einfügen con.push_back ( 1 ); con.push_back ( 2 ); con.push_back ( 3 ); //con in gesamt einfügen gesamt.push_back ( con );
-
typedef std::vector<std::string> CStringContainer; // Die Klasse String ist kein C String, char ist ein C-String^^ typedef std::vector<int> CIntContainer, CGesamtContainer;
-
Vielen Dank, jetzt habe ich's endlich kapiert, hat geklappt.
Nun aber meine nächste Denkhürde.
Mir ist nicht klar, wie ich dann, wenn ich den GesamtContainer der Funktion mitgebe und mit der for-Schleife die Container vom GesamtContainer durchgehe, in den Inhalt von den inneren Containern komme :S
Also die for-schleife von der Funktion ist so:for(int Container = 0; Container < pGesamtContainer->size(); Container++)
So gehe ich jeden Container durch, aber eben, wie komme ich zum Inhalt der anderen Containern..
Sorry wegen meiner fragerei.Besten Dank!
-
Du kannst den []-Operator auch verknüpfen:
for (int i = 0; i < GesamtContainer.size (); i++ ) for (int y = 0; y < GesamtContainer[i].size(); y++ ) std::cout << GesamtContaner[i][y] << "\n";
@Wikinger75:
Er macht das C offensichtlich vor Klassen und bei den typedefs ebenfalls. Ich glaube kaum, dass er da einen C-Sring haben wollte, sondern er hat einen String-Container und weil es ein Typ ist noch ein C davor.@Problem:
Die ungarische Notation wird eigentlich kaum noch gebraucht, da einem die IDE einem sehr schnell alle Typen sagt, wenn man sie wissen will. Und man muss dann auch nicht ständig die Namen ändern gehen, wenn man sich einmal für einen anderen Typen entscheidet hat. (Vor allem in der template Programmierung macht es gar keinen Sinn mehr..)
-
drakon schrieb:
Du kannst den []-Operator auch verknüpfen:
for (int i = 0; i < GesamtContainer.size (); i++ ) for (int y = 0; y < GesamtContainer[i].size(); y++ ) std::cout << GesamtContaner[i][y] << "\n";
Ah so, dann zeigt also das y bei GesamtContaner[i][y] auf die entsprechende Zeile vom entsprechenden Container der im GesamtContainer enthalten ist?
Wird langsam kompliziert zum schreiben, wegen der ganzen Verknüpferei ^^
Vielen Dank Drakon!
-
Problem schrieb:
Ah so, dann zeigt also das y bei GesamtContaner[i][y] auf die entsprechende Zeile vom entsprechenden Container der im GesamtContainer enthalten ist?
Wird langsam kompliziert zum schreiben, wegen der ganzen Verknüpferei ^^
Vielen Dank Drakon!Genau. Du kannst das Spielchen auch mit Iteratoren machen, was dann aber (ohne typedefs) noch ein Stückchen schlimmer aussieht.
-
Ich lass das jetzt so, solangsa funktioniert bin ich zufrieden
Nochmals vielen Dank und vielleicht bis bald ^^