std::iter_swap() 算法
- 自 C++20 起
- 直到 C++20
// (1)
template< class ForwardIt1, class ForwardIt2 >
constexpr void iter_swap( ForwardIt1 a, ForwardIt2 b );
// (1)
template< class ForwardIt1, class ForwardIt2 >
void iter_swap( ForwardIt1 a, ForwardIt2 b );
交换给定迭代器所指向元素的值。
参数
a b | 要交换元素的迭代器。 |
类型要求
ForwardIt1 ForwardIt2 | LegacyForwardIterator |
*a *b | Swappable |
返回值
(无)
复杂度
常数。
异常
(无)
可能的实现
iter_swap(1)
template<class ForwardIt1, class ForwardIt2>
constexpr void iter_swap(ForwardIt1 a, ForwardIt2 b) // constexpr since C++20
{
using std::swap; // for ADL
swap(*a, *b);
}
备注
此函数模板模拟 Swappable 所给出的 swap 操作语义。即,考虑通过 ADL 找到的 swap 重载以及 std::swap
的备用。
示例
以下是 C++ 中选择排序的实现。
Main.cpp
#include <algorithm>
#include <functional>
#include <iostream>
#include <random>
#include <vector>
template<class ForwardIt>
void selection_sort(ForwardIt begin, ForwardIt end)
{
for (ForwardIt i = begin; i != end; ++i)
std::iter_swap(i, std::min_element(i, end));
}
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dist(-9, +9);
std::vector<int> v;
std::generate_n(back_inserter(v), 20, bind(dist, gen));
std::cout << "Before sort: " << std::showpos;
for (auto e : v)
std::cout << e << ' ';
selection_sort(v.begin(), v.end());
std::cout << "\nAfter sort : ";
for (auto e : v)
std::cout << e << ' ';
std::cout << '\n';
}
输出
Before sort: -9 -3 +2 -8 +0 -1 +8 -4 -5 +1 -4 -5 +4 -9 -8 -6 -6 +8 -4 -6
After sort : -9 -9 -8 -8 -6 -6 -6 -5 -5 -4 -4 -4 -3 -1 +0 +1 +2 +4 +8 +8