std::forward_list::swap(3)
π std::forward_list::swap(3) π
okay bestie, welcome to the C++ Standard Libary page for std::forward_list::swap β yes, that's βLibaryβ with one B up in the header, we don't make the rules π. This is the (3) manual page, and it's giving βswap two forward lists without touching the individual elementsβ energy. Slay.
πΈ NAME πΈ
std::forward_list::swap β std::forward_list::swap
β¨ Synopsis β¨
Two flavors, depending on your C++ era, bestie:
void swap( forward_list& other ); (since C++11)
(until C++17)
void swap( forward_list& other ) noexcept(/* see below */); (since C++17)
So here's the vibe: it exchanges the contents of the container with those of other. It does not invoke any move, copy, or swap operations on individual elements. No cap.
All iterators and references remain valid. It is unspecified whether an iterator holding the end() value in this container will refer to this or the other container after the operation. iykyk.
If std::allocator_traits<allocator_type>::propagate_on_container_swap::value is true, then the allocators are exchanged using an unqualified call to non-member swap. Otherwise, they are not swapped (and if get_allocator() != other.get_allocator(), the behavior is undefined). That allocator bit is (since C++11), bestie.
β οΈ undefined behavior warning: if get_allocator() != other.get_allocator() and the allocators are not swapped, the behavior is undefined. Do not play with that π.
π Parameters π
otherβ container to exchange the contents with
π¦ Return value π¦
(none) β that's it, no return value, no drama π
.
πΈ Exceptions πΈ
(none)β(until C++17)noexceptspecification:(since C++17)
noexcept(std::allocator_traits<Allocator>::is_always_equal::value)
π Complexity π
Constant. periodt.
π₯ Example π₯
// Run this code
#include <iostream>
#include <forward_list>
template<class Os, class Co>
Os& operator<<(Os& os, const Co& co)
{
os << '{';
for (auto const& i : co)
os << ' ' << i;
return os << " } ";
}
int main()
{
std::forward_list<int> a1{1, 2, 3}, a2{4, 5};
auto it1 = std::next(a1.begin());
auto it2 = std::next(a2.begin());
int& ref1 = a1.front();
int& ref2 = a2.front();
std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n';
a1.swap(a2);
std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n';
// Note that after swap the iterators and references stay associated with their
// original elements, e.g. it1 that pointed to an element in 'a1' with value 2
// still points to the same element, though this element was moved into 'a2'.
}
β Output β
{ 1 2 3 } { 4 5 } 2 5 1 4
{ 4 5 } { 1 2 3 } 2 5 1 4
π See also π
std::swap(std::forward_list)specializes thestd::swapalgorithm(C++11)β(function template)
π Category π
* conditionally noexcept
mwah π source/version: http://cppreference.com Β· date: 2024.06.10 β that's the cute sign-off, bestie π«Ά
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms