📜  C++ STL-algorithm.swap_ranges()函数(1)

📅  最后修改于: 2023-12-03 15:29:50.088000             🧑  作者: Mango

C++ STL-algorithm.swap_ranges()函数

简介

C++ STL的algorithm库提供了很多非常有用的算法函数,其中swap_ranges()函数用于交换两个指定范围内的元素。它接受两对迭代器,第一对迭代器定义要交换的第一个范围,第二对迭代器定义要交换的第二个范围,然后将这两个范围中的元素交换。这个函数是一个通用算法,适用于不同的容器(如vector、list、deque等)。

函数原型
template<class ForwardIt1, class ForwardIt2>
void swap_ranges(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2);
参数说明
  1. first1, last1: 定义要交换的第一个范围的迭代器。first1表示要交换元素的第一个区间的第一个元素的迭代器,last1表示要交换元素的第一个区间的最后一个元素的下一个位置的迭代器,last1不能小于first1。 但是,如果该区间为空,则两个指针可以是相等的。
  2. first2: 第二个区间的首元素的迭代器。
返回值

swap_ranges()函数没有返回值,它只是交换两个容器的指定范围内的元素。

代码示例
#include <iostream>
#include <algorithm>
#include <vector>
 
int main()
{
    std::vector<int> foo {1, 2, 3, 4, 5};
    std::vector<int> bar {10, 20, 30, 40, 50};
 
    std::swap_ranges(foo.begin(), foo.begin()+3, bar.begin()+1);
 
    for (int i: foo) {
        std::cout << i << " ";
    }
    std::cout << "\n";
    for (int i: bar) {
        std::cout << i << " ";
    }
    std::cout << "\n";
 
    return 0;
}

输出:

40 50 30 4 5
10 1 2 3 20

上面的示例将foo中的前三个元素(1、2和3)与bar中从第二个元素开始的三个元素(20、30和40)交换。输出的结果表明,foo中的元素已替换为bar中的对应元素,而bar中的元素已替换为foo中的对应元素。

注意事项
  1. swap_ranges()函数只能用于顺序容器,不能用于关联容器(如map或set)等无序容器。
  2. 调用swap_ranges()函数时,应确保两个区间的大小相等,否则可能会导致严重的内存错误。
  3. swap_ranges()函数并不检查迭代器区间是否重叠。如果这两个区间重叠,则在交换元素时可能会产生未定义行为。