📅  最后修改于: 2023-12-03 15:29:54.044000             🧑  作者: Mango
在C++中,std::swap_ranges是一个STL算法,用于交换两个序列中的元素。它的语法与其他STL算法非常相似。
template<class ForwardIt1, class ForwardIt2>
ForwardIt2 swap_ranges(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2);
该函数需要三个参数。
std::swap_ranges会交换[first1, last1)范围内的元素和[first2, first2 + (last1 - first1))范围内的元素。
正如前面所述,std::swap_ranges返回一个ForwardItertor,该迭代器可以用于提供第二个序列中交换的元素的位置。
这个算法的时间复杂度是线性的,因为它只需要遍历两个序列中的每个元素一次。这使得它成为交换两个序列的最有效方法之一。
下面是一个示例程序,展示了如何使用std::swap_ranges来交换两个vector中的元素。
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> vec1 = {1, 2, 3, 4, 5};
std::vector<int> vec2 = {6, 7, 8, 9, 10};
// 显示交换前的vec1和vec2
std::cout << "Before swapping:\nvec1: ";
for(auto i : vec1) std::cout << i << ' ';
std::cout << "\nvec2: ";
for(auto i : vec2) std::cout << i << ' ';
// 交换vec1和vec2的元素
std::swap_ranges(vec1.begin(), vec1.end(), vec2.begin());
// 显示交换后的vec1和vec2
std::cout << "\n\nAfter swapping:\nvec1: ";
for(auto i : vec1) std::cout << i << ' ';
std::cout << "\nvec2: ";
for(auto i : vec2) std::cout << i << ' ';
return 0;
}
输出为:
Before swapping:
vec1: 1 2 3 4 5
vec2: 6 7 8 9 10
After swapping:
vec1: 6 7 8 9 10
vec2: 1 2 3 4 5
可以看到,std::swap_ranges交换了两个vector中的元素。
总结:
std::swap_ranges是一个非常有用的STL算法,可以交换两个容器中的元素。它的时间复杂度为线性,因此它是交换两个序列的最有效方法之一。在需要交换容器中的元素时,可以考虑使用std::swap_ranges。