Удаление элементов из массива STL
дан одномерный статический массив из 15 элементов, нужно удалить из него все элементы значение которых превышает 5
for (int i = 0; i < lim; i++)
{
if (arr[i] > sred)
{
for (j = i; j < lim; j++)
{
arr[i] = arr[i + 1];
}
--lim;
} else { }
}
cout << endl;
for (int i = 0; i < lim; i++)
{
cout << arr[i]<<" ";
}
lim - кол-во элементов массива, sred - число, элементы больше которого должны удаляться
Ответы (2 шт):
Ладно, вот:
int i;
// А есть ли вообще такие элементы?
for(i = 0; i < lim; ++i) if (arr[i] > sred) break;
if (i < lim) // Если таки есть...
{
// i - индекс, КУДА писать (очередной)
// j - ОТКУДА (очередной нормальный, меньше sred
for(int j = i; ++j < lim; )
if (arr[j] <= sred)
arr[i++] = arr[j];
}
lim = i;
Пример полной программы: https://ideone.com/LBgRt4
Вот как примерно работает - i - индекс, куда мы пишем хороший элемент, а j - какой именно элемент пишем. Как только находим хороший - копируем его в конец хороших элементов и идем дальше.
Номер: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 i j
Элемент: 1 2 3 4 5 6 7 8 2 3 4 5 6 7 0
Нашли первый: ... 3 4 5 6 7 8 2 3 4 5 6 7 0 5
for(int j = i; ++j < lim; ) if (arr[j] <= sred) 8
arr[i++] = arr[j]; 4 5 2 7 8 2 3 4 5 6 7 0 6
for(int j = i; ++j < lim; ) if (arr[j] <= sred) 9
arr[i++] = arr[j]; 4 5 2 3 8 2 3 4 5 6 7 0 7
for(int j = i; ++j < lim; ) if (arr[j] <= sred) 10
arr[i++] = arr[j]; 4 5 2 3 4 2 3 4 5 6 7 0 8
for(int j = i; ++j < lim; ) if (arr[j] <= sred) 11
arr[i++] = arr[j]; 4 5 2 3 4 5 3 4 5 6 7 0 9
for(int j = i; ++j < lim; ) if (arr[j] <= sred) (12,13-плохие) 14
arr[i++] = arr[j]; 4 5 2 3 4 5 0 4 5 6 7 0 10
Выход из цикла
В массиве - 10 чисел
Раз уж у вас указан STL то посоветую использовать именно алгоритмы stl для улаления элементов из вектора. В частности использовать идиому remove-erase:
auto last_iter =
std::remove_if(arr.begin(), arr.end(), [](int val) { return val > 5; });
arr.erase(last_iter, arr.end());
Благодаря этому проблема решается в две строчки (можно и в одну, но так читабельнее) при этом это позволяет избежать излишних затрат на копирование при удалении из середины массива