跳到主要内容

std::iter_swap() 算法

// (1)
template< class ForwardIt1, class ForwardIt2 >
constexpr 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
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。

std::iter_swap() 算法

// (1)
template< class ForwardIt1, class ForwardIt2 >
constexpr 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
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。