std::inplace_vector<T,N>::swap
constexpr void swap( inplace_vector& other ) noexcept(/* see below */); | (начиная с C++26) |
Обменивает содержимое контейнера с содержимым other. Итераторы и ссылки при этом не начинают ассоциироваться с другим контейнером.
Параметры
| other | - | контейнер, с которым обменивается содержимым |
Исключения
noexcept спецификация: noexcept(N == 0 ||
(std::is_nothrow_swappable_v<T> && std::is_nothrow_move_constructible_v<T>))
Сложность
Линейная относительно размера контейнера.
Пример
#include <inplace_vector>
#include <print>
int main()
{
std::inplace_vector<int, 3> a1{1, 2, 3}, a2{4, 5, 6};
auto i1 = a1.begin();
auto i2 = a2.begin();
int& r1 = a1[1];
int& r2 = a2[1];
auto print_them_all = [&](auto rem)
{
std::println("{}a1 = {}, a2 = {}, *i1 = {}, *i2 = {}, r1 = {}, r2 = {}",
rem, a1, a2, *i1, *i2, r1, r2);
};
print_them_all("Before swap:\n");
a1.swap(a2);
print_them_all("After swap:\n");
// Note that after swap() iterators and references stay associated with their
// original sites, e.g., i1 points to element a1[0], r1 refers to a1[1].
}
Вывод:
Before swap: a1 = [1, 2, 3], a2 = [4, 5, 6], *i1 = 1, *i2 = 4, r1 = 2, r2 = 5 After swap: a1 = [4, 5, 6], a2 = [1, 2, 3], *i1 = 4, *i2 = 1, r1 = 5, r2 = 2
См. также
|
(C++26) | специализирует алгоритм std::swap (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/inplace_vector/swap