2016-11-09 2 views

Antwort

0

nodes[i] ist ein Vektor von ganzen Zahlen . Sie versuchen, einen Vektor an einen Vektor von Ganzzahlen anzufügen.

Entweder tun:

nodes.push_back({i/c, i%c, -1, -1, 0}); 

oder

nodes[i] = {i/c, i%c, -1, -1, 0}; 

Die zweite Lösung die beste ist, da Sie bereits die richtige Dimension zu Ihrem Vektor gab. Keine Notwendigkeit r*c mehr Elemente hinzufügen ...

in Ihrem Code, entweder erstellen leer und füllen mit push_back:

std::vector<std::vector<int>> nodes; 
for(i = 0; i < r*c; i++) 
{   
    nodes.push_back({i/c, i%c, -1, -1, 0}); 
} 

oder mit der richtigen Dimension erstellen und zuordnen Artikel:

std::vector<std::vector<int>> nodes (r*c, std::vector<int> (5)); 
for(i = 0; i < r*c; i++) 
{   
    nodes[i] = {i/c, i%c, -1, -1, 0}; 
} 
+0

Hallo Jean, Vielen Dank! Das hat das Problem gelöst! – Ishrat

0

Verwenden Sie die Methode insert statt push_back

nodes[i].insert(nodes[I].end(), {i/c, i%c, -1, -1, 0}); 

Aber bevor diese Sie den Vektor wie

vector<vector<int>> nodes (r*c); 

Ansonsten ersten 5 Elemente jeder subvector enthalten Nullen erklären.

Sie können auch Methode verwenden assign

nodes[i].assign( {i/c, i%c, -1, -1, 0}); 
+0

, das ist nicht das Problem. 'nodes [i]' ist ein Vektor von _integers_. Sie können keinen Vektor darin einfügen. Das ist der Grund, warum 'push_back' fehlschlägt (und' einfügen' kompiliert, aber Gott weiß, was es tut. Segfault hier) –

+0

@ Jean-FrançoisFabre Nein Sie liegen falsch. Es ist kein Vektor, der eingefügt wird. Es sind Werte der Initialisierungsliste, die eingefügt werden. –

+0

Ich habe immer noch Zweifel, und Sie haben offensichtlich nicht getestet, weil, dass die Knoten [i] .insert (Knoten [I]. End(), {i/c, i% c, -1, -1, 0}); 'kompiliert nicht (' I' ist nicht deklariert). Auch 'nodes.insert (nodes.end(), {i/c, i% c, -1, -1, 0});' kompiliert! –

Verwandte Themen