Spec-Zone.ru › C++

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
(открытая функция-член)
assign
присваивает значения контейнеру
(открытая функция-член)
assign_range
присваивает контейнеру диапазон значений
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/hive/operator%3D

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API