std::hive<T,Allocator>::erase
iterator erase( const_iterator pos );
|
(1) | (начиная с C++26) |
iterator erase( const_iterator first, const_iterator last );
|
(2) | (начиная с C++26) |
Удаляет указанные элементы из контейнера.
pos.[first, last).Итераторы и ссылки на удалённый элемент инвалидируются. Если элемент является последним в контейнере, итератор end() также инвалидируется. Остальные ссылки и итераторы не затрагиваются.
Итератор pos должен быть корректным и разыменовываемым. Таким образом, итератор end() (который корректен, но не разыменовываем) не может использоваться в качестве значения для pos.
Итератор first не обязан быть разыменовываемым, если first == last: удаление пустого диапазона является недействием (no-op).
Параметры
| pos | - | итератор на удаляемый элемент |
| first, last | - | пара итераторов, определяющих диапазон удаляемых элементов |
Возвращаемое значение
Итератор, следующий за последним удалённым элементом.
pos ссылается на последний элемент, то возвращается итератор end().last == end() до удаления, то возвращается обновлённый итератор end().[first, last) является пустым диапазоном, то возвращается last.Сложность
Дополнительно, если какие-либо активные блоки становятся пустыми в результате вызова функции, — в худшем случае линейная от количества блоков элементов.
Примечания
Когда элементы контейнера необходимо удалить на основе предиката, вместо итерации по контейнеру и вызова унарного erase, перегрузка с диапазоном итераторов обычно используется с std::remove()/std::remove_if() для минимизации количества перемещений оставшихся (неудалённых) элементов, — это идиома erase-remove.
std::erase_if() заменяет идиому erase-remove.
Пример
#include <hive>
#include <print>
int main()
{
std::hive v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
std::println("{}", v);
v.erase(v.begin());
std::println("{}", v);
v.erase(std::next(v.begin(), 2), std::next(v.begin(), 5));
std::println("{}", v);
// Erase all even numbers
for (auto 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]
Смотри также
| удаляет все элементы, удовлетворяющие заданным критериям (шаблон функции) | |
| очищает содержимое (открытая функция-элемент) |