std::inplace_vector<T,N>:: erase
|
constexpr
iterator erase
(
const_iterator pos
)
;
|
(1) | (начиная с C++26) |
|
constexpr
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(2) | (начиная с C++26) |
Удаляет указанные элементы из контейнера.
[
first
,
last
)
.
Итераторы (включая
end()
итератор) и ссылки на элементы в точке удаления или после неё становятся недействительными.
Итератор pos должен быть действительным и разыменуемым. Следовательно, итератор end() (который является действительным, но не разыменуемым) не может использоваться в качестве значения для pos .
Итератор first не обязательно должен быть разыменовываемым, если first == last : удаление пустого диапазона является операцией без эффекта.
Содержание |
Параметры
| pos | - | итератор на удаляемый элемент |
| first, last | - | пара итераторов, определяющих диапазон удаляемых элементов |
| Требования к типам | ||
-
T
не является
MoveAssignable
, поведение не определено.
|
||
Возвращаемое значение
Итератор, следующий за последним удалённым элементом.
[
first
,
last
)
является пустым диапазоном, то возвращается
last
.
Исключения
Не вызывает исключений, если только исключение не вызвано оператором присваивания
T
.
Сложность
Линейная: количество вызовов деструктора
T
равно количеству удаленных элементов, оператор присваивания
T
вызывается количество раз, равное количеству элементов в векторе после удаленных элементов.
Примечания
Когда элементы контейнера нужно удалить на основе предиката, вместо итерации по контейнеру и вызова унарного
erase
, обычно используется перегрузка с диапазоном итераторов вместе с
std::remove()/std::remove_if()
для минимизации количества перемещений оставшихся (неудаленных) элементов — это идиома erase-remove.
std::erase_if()
заменяет идиому erase-remove.
Пример
#include <inplace_vector> #include <print> int main() { std::inplace_vector<int, 10> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; std::println("{}", v); v.erase(v.begin()); std::println("{}", v); v.erase(v.begin() + 2, v.begin() + 5); std::println("{}", v); // Удалить все четные числа for (std::inplace_vector<int, 10>::iterator it{v.begin()}; it != v.end();) if (*it % 2 == 0) it = v.erase(it); else ++it; std::println("{}", v); }
Вывод:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 6, 7, 8, 9] [1, 7, 9]
Смотрите также
|
удаляет все элементы, удовлетворяющие определённым критериям
(шаблон функции) |
|
|
очищает содержимое
(публичная функция-член) |