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: удаление пустого диапазона ничего не делает.
Параметры
| pos | - | итератор на удаляемый элемент |
| first, last | - | пара итераторов, задающая диапазон удаляемых элементов |
Возвращаемое значение
Итератор, следующий за последним удалённым элементом.
pos указывает на последний элемент, возвращается итератор end().last == end() до удаления, возвращается обновлённый итератор end().[first, last) является пустым диапазоном, возвращается last.Сложность
Кроме того, если в результате вызова функции какие-либо активные блоки останутся без элементов, в худшем случае сложность линейна относительно количества блоков элементов.
Примечания
Если элементы контейнера нужно удалить на основании предиката, обычно используют перегрузку с диапазоном итераторов и std::remove()/std::remove_if(), а не перебирают контейнер и вызывают унарную операцию erase. Это позволяет свести к минимуму количество перемещений оставшихся (неудалённых) элементов — такой подход называется идиомой 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]
См. также
|
(C++26) | удаляет все элементы, удовлетворяющие заданным условиям (шаблон функции) |
| очищает содержимое (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/hive/erase