C++ Vector Verständniss Problem.

Status
Not open for further replies.

Geschi

Hack User
22 Jan 2015
129
10
#1
Hay Liebe Community,

ich bin gerade dabei C++ zu lernen und beschäftige mich gerade mit dem Befehl Vector. Dabei bin ich auf etwas gestoßen was ich einfach nicht verstehen will.
Hier der Code :
Code:
#include <vector>
#include <string>
#include <iostream>

using namespace std;
 
int main(int argc, const char* argv[]) {
    vector < vector<int>> ma ({  { 1,2,3 }, { 4,4 }, { 4,5,6 }  });
    for (vector<int>& m : ma) {
        for (int j : m) {
            cout << j << endl;
        }
  }
}
Mein Problem ist was genau passiert in Folgender for Schleife :
Code:
for (vector<int>& m : ma)
ich kann keine ausgabe erzeugen auf
Code:
m
um zu sehen was es genau tuht, was soweit auch sinn macht. aber woher weis die folgende for schleife
Code:
for (int j : m)
Auf was sie zugreift.

Ich bin mir nicht sicher ob meine Frage Verständlich rüberkommt.
Danke for die Hilfe mfg Geschi.
 
Likes: LaMe

Sephirot

Well-Known Member
2 Jun 2015
1,762
1,275
#2
Hay Liebe Community,

ich bin gerade dabei C++ zu lernen und beschäftige mich gerade mit dem Befehl Vector. Dabei bin ich auf etwas gestoßen was ich einfach nicht verstehen will.
Hier der Code :
Code:
#include <vector>
#include <string>
#include <iostream>

using namespace std;

int main(int argc, const char* argv[]) {
    vector < vector<int>> ma ({  { 1,2,3 }, { 4,4 }, { 4,5,6 }  });
    for (vector<int>& m : ma) {
        for (int j : m) {
            cout << j << endl;
        }
  }
}
Mein Problem ist was genau passiert in Folgender for Schleife :
Code:
for (vector<int>& m : ma)
ich kann keine ausgabe erzeugen auf
Code:
m
um zu sehen was es genau tuht, was soweit auch sinn macht. aber woher weis die folgende for schleife
Code:
for (int j : m)
Auf was sie zugreift.

Ich bin mir nicht sicher ob meine Frage Verständlich rüberkommt.
Danke for die Hilfe mfg Geschi.
Der zweite Code Abschnitt scheint falsch zu sein oder? Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe aber "aber woher weis die folgende for schleife for (int j : m)"
Da der Typ 'vector' bekannt ist und das Wissen vorhanden, über die Werte zu iterieren.
 

imi-tat0r

www.ev0lve.xyz
9 Oct 2015
1,848
4,033
#3
Hay Liebe Community,

ich bin gerade dabei C++ zu lernen und beschäftige mich gerade mit dem Befehl Vector. Dabei bin ich auf etwas gestoßen was ich einfach nicht verstehen will.
Hier der Code :
Code:
#include <vector>
#include <string>
#include <iostream>

using namespace std;
 
int main(int argc, const char* argv[]) {
    vector < vector<int>> ma ({  { 1,2,3 }, { 4,4 }, { 4,5,6 }  });
    for (vector<int>& m : ma) {
        for (int j : m) {
            cout << j << endl;
        }
  }
}
Mein Problem ist was genau passiert in Folgender for Schleife :
Code:
for (vector<int>& m : ma)
ich kann keine ausgabe erzeugen auf
Code:
m
um zu sehen was es genau tuht, was soweit auch sinn macht. aber woher weis die folgende for schleife
Code:
for (int j : m)
Auf was sie zugreift.

Ich bin mir nicht sicher ob meine Frage Verständlich rüberkommt.
Danke for die Hilfe mfg Geschi.
Code:
 vector < vector<int>> ma ({  { 1,2,3 }, { 4,4 }, { 4,5,6 }  });
du hast einen Vektor aus Vektoren aus ints.
Code:
for (vector<int>& m : ma)
iteriert dir durch den ersten vektor. Gelesen: Für jeden vector<int> m in vector<vector<int>> ma.
das & bedeutet, dass es eine referenz ist. Bedeutet, dass Änderungen sich auf das original objekt auswirken.

Antwort auf deine Frage: m = vector<int> als typ und welcher vektor es ist liegt an der iteration (aka wie oft die schleife schon durchgelaufen ist)

Vollständigkeitshalber:
Code:
for (int j : m)
iteriert dir durch die ints in dem zweiten vektor. Gelesen: Für jede int j in vector<int> m.
 

Geschi

Hack User
22 Jan 2015
129
10
#4
also gibt m nur die umläuft der schleife selbst aus. lässt sich das darstellen in welchem umlauf man sich befindet?
 

Sephirot

Well-Known Member
2 Jun 2015
1,762
1,275
#5
Position einnehmen klingt bisschen falsch. Variabel J nimmt einfach die Werte vom Vector M an bzw. bekommt den nächsten Wert bei einer neuen Iteration von der Datenstruktur zugewiesen.
 

rn_

I'm not online, that's just my bot.
7 Jan 2011
5,724
11,099
#7
lässt sich die aktuelle Iteration darstellen also ausgeben ?
Code:
int main( int argc, const char* argv[] )
{
    vector < vector<int>> ma( { { 1,2,3 }, { 4,4 }, { 4,5,6 } } );

    for( auto begin = ma.begin(), it = begin; it != ma.end(); ++it ) {
        cout << "Iteration nr. " << ( it - begin ) << endl;
        for( auto i : *it ) {
            cout << "\t" << i << endl;
        }
    }
}
Output:
Code:
Iteration nr. 0
        1
        2
        3
Iteration nr. 1
        4
        4
Iteration nr. 2
        4
        5
        6
edit:
https://en.cppreference.com/w/cpp/container/vector/begin
https://en.cppreference.com/w/cpp/container/vector/end
 
Status
Not open for further replies.