Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

swap_ranges

公众成员函数  <algorithm>
template <class ForwardIterator1, class ForwardIterator2>
  ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1,
                                ForwardIterator2 first2);

交换两个范围的值

将[first1,last1]范围内每个元素的值与从first2开始的范围内各自元素的值交换。
函数调用swap(无限定)来交换元素
这个函数模板的行为相当于:
template<class ForwardIterator1, class ForwardIterator2>
  ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1,
                                ForwardIterator2 first2)
{
  while (first1!=last1) {
    swap (*first1, *first2);
    ++first1; ++first2;
  }
  return first2;
}

☲  参数


first, last
指向一个序列初始和最终位置的前向迭代器。使用的范围是[first,last), 它包含first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。

first2
指向目标序列中的初始位置的前向迭代器。 所使用的范围与范围[first1,last1]包含相同数量的元素
两个范围不得重叠。
Swap必须定义为两个交换迭代器类型所指向的类型(按它们顺序)。

☉  返回值



指向第二个序列中交换的最后一个元素的迭代器。

☣  示例



// swap_ranges example
#include <iostream>     // std::cout
#include <algorithm>    // std::swap_ranges
#include <vector>       // std::vector

int main () {
  std::vector<int> foo (5,10);        // foo: 10 10 10 10 10
  std::vector<int> bar (5,33);        // bar: 33 33 33 33 33

  std::swap_ranges(foo.begin()+1, foo.end()-1, bar.begin());

  // print out results of swap:
  std::cout << "foo contains:";
  for (std::vector<int>::iterator it=foo.begin(); it!=foo.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  std::cout << "bar contains:";
  for (std::vector<int>::iterator it=bar.begin(); it!=bar.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

输出:
foo contains: 10 33 33 33 10
bar contains: 10 10 10 33 33

✥ 复杂度



first and last之间的距离是线性的: 对范围内的每个元素执行交换操作。

⇄ 数据竞争


两个范围内的对象被修改

☂ 异常安全性



如果迭代器上的元素赋值或操作抛出抛出。
注意,无效的参数会导致未定义的行为。

🍄  另请参阅



swap 交换两个对象的值(公众成员函数)
iter_swap 交换两个迭代器指向的对象的值(公众成员函数)
replace 复制并比较替换范围内的值(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图