C++ 算法 中的 swap_ranges函数

首页 / C++入门教程 / C++ 算法 中的 swap_ranges函数

C++算法 swap_ranges()用从first2开始的参数内的元素交换[first1,last2)参数内的元素。

简而言之,我们可以说 swap_ranges()交换两个序列中的元素,即第一个序列中某个位置的每个元素都被第二个序列中相同位置的元素替换,反之-反之亦然。

swap_ranges - 语法

template <class ForwardIterator1, class ForwardIterator2>
  ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1,
                                ForwardIterator2 first2);

swap_ranges - 参数

first1 :一个正向迭代器,指向要交换其元素的第一个参数的第一个位置。

last1 :一个向前迭代器,指向要交换其元素的第一个参数的最终位置之后的位置。

first2 :一个正向迭代器,指向要交换其元素的第二个参数的第一个位置。

swap_ranges - 返回值

swap_ranges()返回一个迭代器,该迭代器指向要交换其元素的第二个参数的末尾。

无涯教程网

swap_ranges - 例子1

让我们看一个简单的示例,以给定参数交换两个向量的元素:

#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交换。

swap_ranges - 例子2

让我们看一个简单的示例来交换两个向量的内容:

#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的前五个元素。

swap_ranges - 例子3

让我们看一个简单的例子,交换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的元素相互交换。

swap_ranges - 例子4

让我们看另一个简单的例子:

#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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

邱岳的产品手记 -〔邱岳〕

深入浅出区块链 -〔陈浩〕

性能测试实战30讲 -〔高楼〕

人人都能学会的编程入门课 -〔胡光〕

动态规划面试宝典 -〔卢誉声〕

Redis源码剖析与实战 -〔蒋德钧〕

编程高手必学的内存知识 -〔海纳〕

大厂广告产品心法 -〔郭谊〕

超级访谈:对话毕玄 -〔毕玄〕

好记忆不如烂笔头。留下您的足迹吧 :)