2016-06-02 20 views
2

Können wir sowas mit C++ STLs machen? Wenn ja, wie initialisiere ich die Elemente? Ich habe versucht, dies zu tun, aber es funktioniert nicht.C++: Paar <vector<int>, Vektor <int>> p;

pair<vector<int>,vector<int>>p; 
p.first[0]=2; 
+1

Wenn etwas nicht funktioniert, beachte ** wie ** es nicht funktioniert. Kompiliert es? Gibt es falsche Ergebnisse? Welche Ergebnisse haben Sie erwartet? – user2079303

+0

Nur durch Neugier, was versuchst du zu tun? – Garf365

+5

Kombiniere keine Dinge, die du nicht selbstständig benutzen kannst. Woher kommen die Upvotes? – LogicStuff

Antwort

5

Können wir etwas mit C++ STLs machen?

Ja. Obwohl Sie wahrscheinlich die standard library stattdessen verwenden.

Wenn ja, wie initialisiere ich die Elemente?

Sie initialisieren die Elemente genauso wie Sie die Elemente eines Vektors initialisieren, der nicht in einem Paar ist. List-initialization ist eine nette Option.

Ich habe versucht, dies zu tun, aber es funktioniert nicht.

Sie versuchen, ein Element des Vektors zu ändern, das Sie nie dort setzen. Werfen Sie einen Blick auf die Seite, die beschreibt, was die operator[] tut. Es besagt nicht, dass es dem Vektor Elemente hinzufügt. Es gibt jedoch other functions das tun.

4

Standardmässig werden die Vektoren keine Größe haben, so sollten Sie entweder push_back einige Elemente oder resize sie zuerst. Ein Weg, um Ihre p zu initialisieren wäre:

pair<vector<int>, vector<int>> p = {{1,2,3}, {4,5,6}}; 
2

p.first und p.second (mit Typ std::vector<int>) initialisiert werden, aber sie sind immer noch leer ist, gibt es keine Elemente in ihnen. Dann wird p.first[0] = 2; zu UB führen.

Vielleicht möchten

p.first.push_back(2); 
1

Ja, es funktioniert, aber Sie haben Speicher zu den std::vector s zuweisen, bevor Sie ihre Elemente zuzugreifen:

//p now can hold 1 element 
p.first.resize(1); 

Alternativ können Sie push_back verwenden:

//p now has 1 element with value 2 
p.first.push_back(2).