Vector und Liste

Oetzicool

Erfahrenes Mitglied
Hey Leute,
ich will in einem vector eine list verwalten, d.h. wenn eine verkette Liste in jedem Vektor eintrag. Meine Frage ist aber nun wie ich auf die "eingebaute" Liste nun zugreifen kann.

Code:
vector<list<string>> v1(2);
vector<list <string>>::iterator it;
	for(it = v1.begin(); it != v1.end(); it++)
	{
		list<string>:: iterator it_string;
		cout << *it << endl;
	}
Hier mal mein Code hier fehlt natürlich das Listendurchgehen aber ich wusste nicht wie ich hoffe ihr könnt mir helfen!
 
Hi.

Bei sowas machen sich typedefs immer ganz gut.

Ansonsten kannst du eigentlich ganz normal auf die Liste über den Iterator zugreifen:
C++:
vector<list<string> > v1(2);
vector<list <string> >::iterator it;
for(it = v1.begin(); it != v1.end(); ++it) // Präinkrement ist besser
{
	list<string>:: iterator it_string = it->begin();
	...
}
Ansonsten solltest du den Präinkrementoperator immer bevorzugen.

Gruß
 
Zuletzt bearbeitet:
Hey ich habs jetzt mal so probiert:
Code:
	vector<list <string>>::iterator it;
	int i = 0;
	for(it = v1.begin(); it != v1.end(); it++)
	{	
		
		
		list<string>:: iterator it_string = it->begin();
		for(it_string = v1[i].begin(); it_string != v1[i].end(); it_string) 
		{
			cout << *it_string << endl;
			
		}
		i++;
Aber da krieg ich ne endlosschleife
 
Du hast vergessen it_string in der for schleife zu erhöhen:
Code:
for(...;...;it_string++)
Außerdem kannst du "v1[i]." durch "it->" ersetzten, dann brauchst du die Variable "i" nicht mehr, das würde dann in etwa so aussehen.
Code:
for(it_string =it->begin(); it_string != it->end(); it_string++)
 
Ahja jetzt hab ich den Fehler gefunden wie dumm,...
jetzt hab ich aber noch ne kleine frage und zwar habe ich jetzt nen struct gebaut
Code:
struct liste {
		string name;
		int zahl1;
		int zahl2;
	};
und auch meinen aufruf geändert
Code:
vector<list<liste>> v1(2);
aber meine frage ist jetzt wie ich den push_back befehl ändern muss das ich wieder problem etwas in meine liste einfügen kann?
 
Hm mich wundert eigtl. das der Compiler dir (Oetzicool) das so durchgehen lässt ... du hast immer an ner Stelle wo es keinen Sinn macht nen Leerzeichen und wo es Sinn macht keines ... vllt. fällt dir auf warum:
C++:
std::vector<std::list<int>> data;
// und
std::vector< std::list<int> > data;
einen Unterschied macht, wenn du mal ans Right-Shift-Zeichen denkst ;)
 
Ich weiß garnicht wie dein Momentane "push_back" aufruf aussieht.
Ich vermute aber in etwa so:
Code:
it->push_back("String");
um ein Struct zu übegeben, würde es in etwa wie folgt aussehen:
Code:
liste entry;
entry.name = "John";
entry.zahl1 = 0;
entry.zahl2 = 0;
it->push_back(entry);

Mehr angaben, wie und wo du das "push_back" anwendest, wären hilfreich, für eine konkrete Hilfestellung.
 
Zurück