template <class T> void swap ( T& a, T& b )
{
T c(a); a=b; b=c;
}
代碼很簡單,推薦使用STL
algorithm中的swap函數而不要自己寫swap函數,因為STL的swap函數有很強的通用性,它基本可以交換任意類型的元素(包括vector,list……)。
看壹個例題:給兩個數組,交換這兩個數組的元素,並打印:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
void myprint(int
&num){cout<<num<<"
";}
int main()
{
vector
<int> A,B;
int
n,m;
cin>>n;
for(int
i=0;i<n;i++)
{
int t;
cin>>t;
A.push_back(t);
}
cin>>m;
for(int
i=0;i<m;i++)
{
int
t;cin>>t;
B.push_back(t);
}
swap(A,B);
for_each(A.begin(),A.end(),myprint);cout<<endl;
for_each(B.begin(),B.end(),myprint);cout<<endl;
return
0;
}
swap函數可以直接交換兩個vector的值,其實是這樣的:vector向量中重載了=操作符號,vector和vector之間可以直接賦值。
但是swap函數有壹個缺點,就是無法交換2個叠代器的值,想要交換壹個string中的兩個要這麽寫的:
交換pos1和pos2兩個位置的值。
string str;
int pos1,pos2;
cin>>str>>pos1>>pos2;
swap(str.begin()+pos1,str.begin()+pos2);
但是CE了,說明swap函數不能交換iterator。
註意:swap函數只能交換兩個相同類型的值。