std::hive<T,Allocator>::splice
void splice( hive& other ); | (1) | (начиная с C++26) |
void splice( hive&& other ); | (2) | (начиная с C++26) |
other в *this. После выполнения операции контейнер other становится пустым.Элементы не копируются и не перемещаются: изменяются только внутренние указатели блоков элементов hive. Зарезервированные блоки в other не переносятся в *this.
Итераторы и ссылки не становятся недействительными; итераторы на перемещённые элементы остаются действительными, но теперь указывают на элементы в *this, а не в other. Если std::addressof(other) == this равно false, итератор past-the-end становится недействительным для обоих контейнеров: other и *this.
Если выбрасывается исключение, операция не имеет эффекта.
Если std::addressof(other) == this равно true, поведение является ошибочным, и операция не имеет эффекта.
Поведение не определено, если выполняется любое из следующих условий:
-
get_allocator() != other.get_allocator(), -
*thisиotherссылаются на один и тот же объект.
Параметры
| other | - | другой контейнер, из которого переносится содержимое |
Сложность
Исключения
std::length_error, если какие-либо активные блоки элементов other находятся за пределами capacity-limits, а также любые исключения, выбрасываемые аллокатором.Пример
#include <hive>
#include <print>
int main()
{
std::hive<int> hotel{1, 2, 3}, motel{4, 5};
std::println("Before splice: hotel = {}, motel = {}", hotel, motel);
hotel.splice(motel);
std::println("After splice: hotel = {}, motel = {}", hotel, motel);
}
Вывод:
Before splice: hotel = [1, 2, 3], motel = [4, 5] After splice: hotel = [1, 2, 3, 4, 5], motel = []
См. также
| вставляет диапазон элементов (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/hive/splice