3.互换
- swap(): 用于两个不同容器对象之间的元素交换。
函数声明为:
template< class T >
void swap( T& a, T& b );
//第二种形式: [c++11]
template< class T2, std::size_t N >
void swap( T2 (&a)[N], T2 (&b)[N]);
//swap_ranges
template< class ForwardIt1, class ForwardIt2 >
ForwardIt2 swap_ranges( ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2 );
说明:
1. 第一种形式:交换a与b
2. 第二种形式:交换a与b数组。等效于std::swap_ranges(a, a+N, b)
3. 第三种形式:交换两个容器的部分元素,返回的first2的交换后最后一个元素的后一个位置。
第三个形式的函数模板:
template<class ForwardIt1, class ForwardIt2>
ForwardIt2 swap_ranges(ForwardIt1 first1,
ForwardIt1 last1,
ForwardIt2 first2)
{
while (first1 != last1) {
std::iter_swap(first1++, first2++);//交换迭代器指向的单个元素
}
return first2; //返回最后一个交换元素的后一个位置
}
例子:
----------省略---------
vector<int> vec1= {1,2,3,4,5,6 };
vector<int> vec2 = { 3,4,5,6,7,8 };
vector<int> vec3 = {-1,-2,-3,-4,-5,-6};
swap(vec1, vec3);//交换全部
swap_ranges(vec1.begin(),vec1.begin()+3,vec2.begin());//交换前三个元素
----------省略---------
输出结果为:
----------swap--------------
vec1: -1 -2 -3 -4 -5 -6
vec3: 1 2 3 4 5 6
----------swap_ranges---------
vec1: 3 4 5 -4 -5 -6
vec2: -1 -2 -3 6 7 8