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 |
复制并比较替换范围内的值(公众成员函数) |