當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ Algorithm swap_ranges()用法及代碼示例


C++ 算法 swap_ranges() 將範圍 [first1, last2) 中的元素與存在於從 first2 開始的範圍中的元素進行交換。

簡而言之,我們可以說,swap_ranges() 交換了兩個序列的元素,即第一個序列中某個位置的每個元素都被第二個序列中相同位置的元素替換,反之亦然。

用法

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

參數

first1:指向第一個範圍的第一個位置的前向迭代器,其元素將被交換。

last1:一個前向迭代器,指向第一個範圍的最終位置,其元素將被交換。

first2:指向第二個範圍的第一個位置的前向迭代器,其元素將被交換。

返回值

swap_ranges() 返回一個迭代器,指向要交換元素的第二個範圍的末尾。

複雜度

複雜度在 first 和 last 之間是線性的。對範圍內的每個元素執行交換操作。

數據競爭

兩個範圍內的對象都被修改。

異常安全

如果元素賦值或迭代器上的操作拋出異常,則拋出異常。

例子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 的結尾交換。

例子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() 函數將向量 v 的前五個元素與向量 c 的元素交換。

例子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 的元素相互交換。

示例 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





相關用法


注:本文由純淨天空篩選整理自 C++ Algorithm swap_ranges()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。