2016-10-10 5 views
0

Hier 2d_vector ist ein n * 3 Vektor, wobei n das Element davon angibt, z.B. 2d_vector = {{0,0,2}, {0,0,1}, {0,0,0}, {0,0, -1}}Löschen eines Vektors eines 2d-Vektors C++ durch Beurteilen eines Elementes dieses Vektors

Ich habe versucht, Elemente dieses 2d_vector zu löschen das passt "2d_vector [i] [2] == -1", wobei i von 0 bis n ist. Mein Code ist wie folgt:

vector< vector<int> >::iterator it = 2d_vector.begin(); 
    for(;it<2d_vector.end();it+=3){ 
     if(**(it+2) == -1){   
      it = staticBlocks.erase(it); 
     } 
    } 

Aber es funktioniert nicht. Wie soll ich tun? Vielen Dank im Voraus.

+0

* n gibt die Gesamtzahl passen von Elementen dieses 2d_vector. –

+2

Sicher kann Ihr Code nicht kompilieren. '2d_vector' ist kein gültiger Name für einen Bezeichner. Verwenden Sie stattdessen "vector_2d". –

+0

Es wird ein [MCve] benötigt. – Yakk

Antwort

0

Lassen Sie uns brechen **(it+2). it+2 bezieht sich auf die zweite vector nach der von it verwiesenen. *(it+2) dereferenziert den Iterator und erhält den zweiten vector nach dem von it referenzierten. Dies ist ein vector, kein Zeiger oder ein Iterator. Es kann nicht dereferenziert werden, so ist **(it+2) zum Scheitern verurteilt. Jedoch sollte (*(it+2))[0] tun, was Sie scheinen zu wollen.

Dies setzt voraus, it+2 ist in Reichweite.

+0

Ich habe es so versucht, das Programm bricht von der for-Schleife ab. –

+0

Wo und warum bricht es ab? Wenn Sie nicht wissen, kann der Debugger Ihrer Entwicklungsumgebung helfen. – user4581301

+0

Es bricht von einer der lösch() Operation innerhalb der for-Schleife ab. –

0

Sie haben so etwas gemeint? :

std::vector<std::vector<int>> vec; 
    for (std::vector<std::vector<int>>::iterator it = vec.begin(); it != vec.end(); ++it) { 
    if (it->at(2) == -1){ 
     vec.erase(it); 
     --it; // This may fix it, if a vector gets deleted, the rest of the list goes one step towards the beggining of it and the next vector will be skipped 
    } 
} 

Sie paßt zu diesen

erase Elementen dieses 2d_vector der "2d_vector [i] [2] == -1"

+0

Ich habe diesen Weg versucht, aber das Programm bricht von der for-Schleife ab. –

+0

Wo? Wie? Bearbeiten Sie Ihre Antwort, ich verstehe nicht, warum – Treycos

+0

Ich denke, ich habe es herausgefunden, versuchen Sie es mit – Treycos