c ++ Как удалить все пустые элементы в двумерном векторе - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь удалить все пустые векторы внутри другого вектора, ниже мой код:

#include<iostream>
#include<vector>

using namespace std;

int main()
{
    vector< vector<int> > vector(9);

    vector[0].push_back(2);
    vector[3].push_back(5);

    cout << vector.size() << endl; // print 9
    for (int i = 0; i < vector.size(); ++i) {
        if (vector[i].size() == 0) {
            vector.erase(vector.begin() + i);
        }
    }
    cout << vector.size() << endl; // prints 5?
}

Теперь он печатает 5 во втором операторе печати, потому что после удаления векторасразу обновляет свой размер.Так что теперь размер отличается от предыдущего, и индекс не указывает на правильный элемент.

Есть ли способ исправить эту проблему, чтобы я мог найти правильный размер после удаления всех пустых элементов?В этом случае должно быть напечатано 2?

1 Ответ

0 голосов
/ 13 мая 2018

Индекс необходимо увеличивать только в том случае, если вы не удалили элемент.

for (int i = 0; i < vector.size(); ) {
    if (vector[i].size() == 0) {
        vector.erase(vector.begin() + i);
    } else ++i;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...