vector.erase будет продвигать все элементы после того, как я перешлю на 1. Это операция O (n).
Кроме того, вы передаете векторы по значению, а не по ссылке.
Ваш код также не стирает весь вектор.
Например:
я = 0
стереть N [0]
N = {{2, 2, 2, 2}, {3, 3, 3, 3}, {4, 4, 4, 4}}
я = 1
стереть N [1]
N = {{2, 2, 2, 2}, {4, 4, 4, 4}}
я = 2
стереть N [2] ничего не происходит, потому что максимальный индекс N [1]
Наконец, я не думаю, что это правильный синтаксис для vector.erase (). Вам нужно передать итератор в начальное местоположение, чтобы стереть нужный элемент.
Попробуйте это:
vector<vector<int>> vectors; // still passing by value so it'll be slow, but at least erases everything
for(int i = 0; i < 1000; ++i)
{
vector<int> temp;
for(int j = 0; j < 1000; ++j)
{
temp.push_back(i);
}
vectors.push_back(temp);
}
// erase starting from the beginning
while(!vectors.empty())
{
vectors.erase(vectors.begin());
}
Вы также можете сравнить это со стиранием с конца (оно должно быть значительно быстрее, особенно при использовании значений, а не ссылок):
// just replace the while-loop at the end
while(!vectors.empty())
{
vectors.erase(vectors.end()-1);
}