文章目录
swap_ranges()
std::swap_ranges 是 C++ 标准库中的一个泛型算法,它用于交换两个序列中的元素。具体来说,它将源序列 [first1, last1) 中的元素与目标序列 [first2, first2 + (last1 - first1)) 中的元素进行交换。这两个序列可以是任何类型的迭代器(如 std::vector, std::list, std::array 等的迭代器)所表示的范围。
下面是一个使用 std::swap_ranges 的例子:
#include <iostream>
#include <vector>
#include <algorithm> // for std::swap_ranges
int main() {
// 创建两个向量
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2(v1.size());
// 用默认值初始化 v2
std::fill(v2.begin(), v2.end(), -1);
// 输出交换前的向量
std::cout << "Before swap_ranges:" << std::endl;
std::cout << "v1: ";
for (int n : v1) {
std::cout << n << " ";
}
std::cout << std::endl;
std::cout << "v2: ";
for (int n : v2) {
std::cout << n << " ";
}
std::cout << std::endl;
// 使用 std::swap_ranges 交换两个向量的元素
std::swap_ranges(v1.begin(), v1.end(), v2.begin());
// 输出交换后的向量
std::cout << "After swap_ranges:" << std::endl;
std::cout << "v1: ";
for (int n : v1) {
std::cout << n << " ";
}
std::cout << std::endl;
std::cout << "v2: ";
for (int n : v2) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,v1 和 v2 初始时分别包含 {1, 2, 3, 4, 5} 和 {-1, -1, -1, -1, -1}。调用 std::swap_ranges(v1.begin(), v1.end(), v2.begin()) 之后,v1 中的元素将被移动到 v2 中,而 v2 中的元素将被移动到 v1 中,因此两个向量的元素将被交换。
输出将会是:
Before swap_ranges:
v1: 1 2 3 4 5
v2: -1 -1 -1 -1 -1
After swap_ranges:
v1: -1 -1 -1 -1 -1
v2: 1 2 3 4 5
请注意,std::swap_ranges 并不会改变序列的大小或容量,它仅仅交换对应位置的元素。此外,源序列和目标序列不能是同一个序列,因为那会导致未定义的行为。