C++算法 swap_ranges()用从first2开始的参数内的元素交换[first1,last2)参数内的元素。
简而言之,我们可以说 swap_ranges()交换两个序列中的元素,即第一个序列中某个位置的每个元素都被第二个序列中相同位置的元素替换,反之-反之亦然。
template <class ForwardIterator1, class ForwardIterator2> ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2);
first1 :一个正向迭代器,指向要交换其元素的第一个参数的第一个位置。
last1 :一个向前迭代器,指向要交换其元素的第一个参数的最终位置之后的位置。
first2 :一个正向迭代器,指向要交换其元素的第二个参数的第一个位置。
swap_ranges()返回一个迭代器,该迭代器指向要交换其元素的第二个参数的末尾。
让我们看一个简单的示例,以给定参数交换两个向量的元素:
#include <algorithm> #include <iostream> #include <vector> #include <iterator> using namespace std; int main() { vector<int> v1 = { 1, 2, 3 }; vector<int> v2 = { 4, 5, 6, 7, 8 }; swap_ranges(v1.begin(), v1.end(), v2.begin()); cout << "v1: "; copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, ", ")); cout << endl; cout << "v2: "; copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, ", ")); cout << endl; }
输出:
v1: 4, 5, 6, v2: 1, 2, 3, 7, 8,
在上面的示例中,向量v1的元素从向量v2的参数开始到v1的结尾被向量v2交换。
让我们看一个简单的示例来交换两个向量的内容:
#include <iostream> #include <utility> #include <vector> using namespace std; int main () { vector<int> v, c; for(int j=0; j < 10; j++) { v.push_back(j); c.push_back(j+1); } swap_ranges(v.begin(), v.begin()+5, c.begin()); /* swaps the first five element of vector v by the elements of vector c */ for(vector<int>::iterator i = v.begin() ; i!= v.end() ; i++) cout<< *i <<" "; cout<<endl; for(vector<int>::iterator k = c.begin() ; k!= c.end() ; k++) cout<<*k<<" "; }
输出:
1 2 3 4 5 5 6 7 8 9 0 1 2 3 4 6 7 8 9 10
在上面的示例中,swap_range()函数用向量c的元素交换向量v的前五个元素。
让我们看一个简单的例子,交换vector和deque的内容:
#include <vector> #include <deque> #include <algorithm> #include <iostream> int main( ) { using namespace std; vector <int> v1; deque <int> d1; vector <int>::iterator v1Iter1; deque<int>::iterator d1Iter1; int i; for ( i = 0 ; i <= 5 ; i++ ) { v1.push_back( i ); } int ii; for ( ii =4 ; ii <= 9 ; ii++ ) { d1.push_back( 6 ); } cout << "Vector v1 is: ( " ; for ( v1Iter1 = v1.begin( ) ; v1Iter1 != v1.end( ) ;v1Iter1 ++ ) cout << *v1Iter1 << " "; cout << ")." << endl; cout << "Deque d1 is: ( " ; for ( d1Iter1 = d1.begin( ) ; d1Iter1 != d1.end( ) ;d1Iter1 ++ ) cout << *d1Iter1 << " "; cout << ")." << endl; swap_ranges ( v1.begin ( ) , v1.end ( ) , d1.begin ( ) ); cout << "After the swap_range vector v1 is: ( " ; for ( v1Iter1 = v1.begin( ) ; v1Iter1 != v1.end( ) ;v1Iter1 ++ ) cout << *v1Iter1 << " "; cout << ")." << endl; cout << "After the swap_range deque d1 is: ( " ; for ( d1Iter1 = d1.begin( ) ; d1Iter1 != d1.end( ) ;d1Iter1 ++ ) cout << *d1Iter1 << " "; cout << ")." << endl; return 0; }
输出:
Vector v1 is: ( 0 1 2 3 4 5 ). Deque d1 is: ( 6 6 6 6 6 6 ). After the swap_range vector v1 is: ( 6 6 6 6 6 6 ). After the swap_range deque d1 is: ( 0 1 2 3 4 5 ).
在上面的示例中,vector和deque的元素相互交换。
让我们看另一个简单的例子:
#include <algorithm> #include <iostream> #include <string> using namespace std; int main() { string s1("Betty Botter bought some butter") ; string s2("But she said the butter was bitter") ; string s3("So she got some better butter") ; string s4("to make the bitter butter better") ; cout << "s1 = " << s1 << endl ; cout << "s2 = " << s2 << endl ; cout << "s3 = " << s3 << endl ; cout << "s4 = " << s4 << endl ; cout << "\nJumble them up!!!" << std::endl ; //swap_ranges swap_ranges(s1.begin(), s1.begin()+15, s2.begin()) ; swap_ranges(s3.begin(), s3.begin()+15, s4.begin()) ; cout << "s1 = " << s1 << endl ; cout << "s2 = " << s2 << endl ; cout << "s3 = " << s3 << endl ; cout << "s4 = " << s4 << endl ; return 0 ; }
输出:
s1 = Betty Botter bought some butter s2 = But she said the butter was bitter s3 = So she got some better butter s4 = to make the bitter butter better Jumble them up!!! s1 = But she said thught some butter s2 = Betty Botter boe butter was bitter s3 = to make the bit better butter s4 = So she got someter butter better
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)