2016-04-26 34 views
2

Ich versuche, ein Verständnis der zweidimensionalen Zeichenkettenvektoren zu entwickeln (Ie ein Vektor innerhalb eines Vektors) und nach einigen Stunden, die ich kämpfen kann, scheint nicht, die Größe von zu vergrößern der äußere Vektor.C++ - die Größe des äußeren Vektors im zweidimensionalen Zeichenkettenvektor vergrößern

Ich fange an, indem ich die folgenden Werte zum ersten inneren Element {"ABC", "Abacus", "Abacus Football Club", "001"} hinzufüge.

Ich möchte dann ein weiteres äußeres Element hinzufügen und "BCD" als ersten Wert hinzufügen. Nach vielen fehlgeschlagenen Versuchen kann ich die Größe des äußeren Vektors nicht erhöhen. Ich präsentiere das Unten, von dem ich denke, dass es das "nächste" ist, das ich habe.

#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 

int main() 
{ 

    vector< vector<string> > vecTeams(1, vector<string>(4)); 

    vecTeams[0][0] = "ABC"; 
    vecTeams[0][1] = "Abacus"; 
    vecTeams[0][2] = "Abacus Football Club"; 
    vecTeams[0][3] = "001"; 

    cout << vecTeams[0][1] << endl; 

    vecTeams.push_back(1); 
    vecTeams[1][0] = "BCD"; 

    cout << vecTeams[1][0] << endl; 

    return 0; 
} 

Wenn es zu kompilieren versuchen nicht mag:

vecTeams.push_back(1); 

Was ist es, dass ich bin Missverständnis und wie kann ich erhöhen die Größe des Vektors und somit weiterhin Daten hinzufügen?

Vielen Dank,

José

+0

Denken Sie an Vektor von Vektoren. Du füllst also einen inneren Vektor mit einigen Elementen mit einem 'push_back()' und dann 'push_back (inneren Vektor) 'als Ganzes mit dem äußeren Vektor –

+1

Statt' push_back' solltest du' resize' verwenden. – Spencer

+0

Wenn Sie beabsichtigen, dass 1 an den Konstruktor des neuen Vektors weitergeleitet wird, indem Sie einen inneren Vektor der Größe 1 erstellen, können Sie das mit 'vecTeams.emplace_back (1);' tun –

Antwort

2

Da vecTeams ein Container ist, die std::vector<std::string> s enthält, dann, logisch, das ist, was Sie es hinzufügen müssen:

vecTeams.push_back(std::vector<std::string>()); 

push_back() ‚s-Parameter ist der neue Wert, der dem Ende des Containers hinzugefügt werden soll, und nicht die Anzahl neuer Werte, die dem Container hinzugefügt werden sollen. Da der Container std::vector<std::string> enthält, müssen Sie einen neuen erstellen und zurückschieben.

Sie können auch resize() verwenden, um die gleiche Sache zu erreichen:

vecTeams.resize(2); 

Nun gibt es zwei Elemente in dem Behälter.

1

Das Argument zu push_back ist ein Vektor zu drücken. 1 ist kein Vektor.

könnten Sie verwenden:

vecTeams.push_back(vector<string>(4)); 

oder vielleicht:

vecTeams.resize(2); 
vecTeams[1].resize(4); 

Alternativ können Sie jede Zeile erstellen, bevor es drängen:

vector< vector<string> > vecTeams; 
vector<string> team; 

team = { "ABC", "Abacus", "Abacus Football Club", "001" }; 
vecTeams.push_back(team); 

team = { "BCD", "bla", "bla", "002" }; 
vecTeams.push_back(team); 

In der Tat Sie brauchen noch nicht einmal team In diesem Code können Sie die Klammerliste direkt in die push_back ca setzen ll.

Wenn jede Zeile 4 Zeichenfolgen enthält, können Sie std::array<string, 4> als Zeilentyp oder struct verwenden.

Verwandte Themen