std::hive<T,Allocator>::operator=
hive& operator=( const hive& other ); | (1) | (начиная с C++26) |
hive& operator=( hive&& other ) noexcept(/* see description */); | (2) | (начиная с C++26) |
hive& operator=( std::initializer_list<T> ilist ); | (3) | (начиная с C++26) |
Заменяет содержимое контейнера.
1) Все элементы в
*this либо копируются с присваиванием, либо уничтожаются. Все элементы из other копируются в *this. Относительный порядок скопированных элементов сохраняется. current-limits не изменяются.
2) Каждый элемент в
Пусть *this либо перемещается с присваиванием, либо уничтожается.EXCEPT — std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value || std::allocator_traits<Allocator>::is_always_equal::valueПусть
ALLOC — std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value || this->get_allocator() == other.get_allocator()
- Если
ALLOCравно true,current-limitsустанавливается вother.current-limits, а каждый блок элементов перемещается изotherв*this.
Указатели и ссылки на элементыotherтеперь указывают на те же элементы, но являющиеся членами*this.
Итераторы, указывающие на элементыother, продолжат указывать на эти элементы, но теперь будут вести себя как итераторы в*this, а не вother. - Если
ALLOCравно false, каждый элемент вotherперемещается в*this.
Ссылки, указатели и итераторы, указывающие на элементыother, а также итераторend()контейнераotherстановятся недействительными.
После выполнения этого оператора
other.empty() равно true. Относительный порядок элементов *this совпадает с порядком элементов other до вызова.
3) Заменяет содержимое элементами из списка инициализации
ilist. Всем существующим элементам *this либо присваиваются значения, либо они уничтожаются.Параметры
| other | - | другой hive, используемый в качестве источника данных |
| ilist | - | список инициализации, используемый в качестве источника данных |
| Требования к типам | ||
-T должен соответствовать требованиям CopyAssignable и CopyInsertable для использования перегрузок (1,3). |
||
-T должен соответствовать требованиям MoveAssignable и MoveInsertable для использования перегрузки (2). (Только если EXCEPT равно false). |
||
Возвращаемое значение
*this
Сложность
1) Линейная относительно размеров
*this и other.
2) Линейная относительно размера
*this. Если ALLOC равно false (то есть аллокаторы не равны и не распространяются), сложность также линейная относительно размера other.
3) Линейная относительно размеров
*this и ilist.Исключения
1,3) Может выбрасывать исключения, определяемые реализацией.
2)
noexcept спецификация: noexcept(/*EXCEPT*/)
Пример
#include <hive>
#include <initializer_list>
#include <print>
#include <utility>
int main()
{
std::hive<int> a{1, 2, 3}, b, c;
std::println("Initially:");
std::println("a = {}", a);
std::println("b = {}", b);
std::println("c = {}", c);
b = a; // overload (1)
std::println("Copy assignment copies data from a to b:");
std::println("a = {}", a);
std::println("b = {}", b);
c = std::move(a); // overload (2)
std::println("Move assignment moves data from a to c, modifying both a and c:");
std::println("a = {}", a);
std::println("c = {}", c);
c = {4, 5, 6, 7}; // overload (3)
std::println("Assignment of initializer_list to c:");
std::println("c = {}", c);
}
Возможный вывод:
Initially: a = [1, 2, 3] b = [] c = [] Copy assignment copies data from a to b: a = [1, 2, 3] b = [1, 2, 3] Move assignment moves data from a to c, modifying both a and c: a = [] c = [1, 2, 3] Assignment of initializer_list to c: c = [4, 5, 6, 7]
См. также
создаёт hive (открытая функция-член) |
|
| присваивает значения контейнеру (открытая функция-член) |
|
| присваивает контейнеру диапазон значений (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/hive/operator%3D