2013-03-18 13 views
8

Ich nehme 20 Zeilen Eingabe. Ich möchte den Inhalt jeder Zeile durch ein Leerzeichen trennen und in einen Vektor von Vektoren einfügen. Wie mache ich einen Vektor von Vektoren? Ich habe Kämpfe haben es zurückzudrängen ...Wie drückt man auf einen Vektor von Vektoren?

Meine Eingabedatei:

Mary had a little lamb 
lalala up the hill 
the sun is up 

Der Vektor wie etwa wie folgt aussehen sollte.

ROW 0: {"Mary","had", "a","little","lamb"} 
ROW 1: {"lalala","up","the","hill"} 

Dies ist mein Code ....

string line; 
vector <vector<string> > big; 
string buf; 
for (int i = 0; i < 20; i++){ 
    getline(cin, line); 
    stringstream ss(line); 

    while (ss >> buf){ 
     (big[i]).push_back(buf); 
    } 
} 
+0

Sie haben einen Vektor von Vektoren drüben. Was ist falsch an deinem Code? –

+1

@AndyProwl Zugriff außerhalb der Grenzen (vorausgesetzt, der Code ist eine gute Darstellung der realen). – juanchopanza

+0

@juanchopanza: Oh, richtig :) Guter Fang –

Antwort

5

Yo könnte mit einem Vektor der Größe beginnen ruleNum

vector <vector<string> > big(ruleNum); 

Diese ruleNum leer vector<string> Elemente halten wird. Sie können dann Elemente in jedes Element zurückschieben, wie Sie es in dem von Ihnen geposteten Beispiel tun.

10

Der Code ist richtig, aber Ihr Vektor enthält keine Elemente, so dass Sie nicht auf big[i] zugreifen können.

Set der Vektor Größe vor der Schleife, entweder im Konstruktor oder so:

big.resize(ruleNum); 

Alternativ können Sie einen leeren Vektor in jeder Schleife Schritt drücken:

big.push_back(vector<string>()); 

Sie dies nicht tun Brauchen Sie die Klammern um big[i] entweder.

3

Sie können wie folgt vorgehen:

string line; 
vector <vector<string> > big; //BTW:In C++11, you can skip the space between > and > 

string currStr; 
for (int i = 0; i < ruleNum; i++){ 
    getline(cin, line); 
    stringstream ss(line); 
    vector<string> buf; 
    while (ss >> currStr){ 
     buf.push_back(buf); 
    } 
    big.push_back(buf); 
} 
+0

Keine Notwendigkeit, 'buf' außerhalb der äußeren Schleife zu erklären, und in der Tat vergessen Sie, es innerhalb der Schleife wegen zu löschen Das. –

+0

@KonradRudolph Sie haben Recht, ich war unvorsichtig, Code nur aktualisiert. Vielen Dank! – taocp

+0

Haha, jetzt machst du unnötige Arbeit, der Vektor wird jedes Mal neu definiert und daher leer, kein 'clear()' es. –

1
   vector<vector<string> > v; 

in Vektoren von Vektoren push_back, werden wir Strings im internen Vektor und push_back des internen Vektors in mit dem externen Vektor push_back.

Einfacher Code, um seine Implementierung zu zeigen: enter code here Vektor> v; Vektor s;

s.push_back("Stack"); 
s.push_back("oveflow");` 
s.push_back("c++"); 
// now push_back the entire vector "s" into "v" 
v.push_back(s); 
Verwandte Themen