SWAP函数
发布网友
发布时间:2022-05-01 21:46
我来回答
共3个回答
热心网友
时间:2022-06-23 23:25
swap函数,作用是交换两个元素的值,以STL的源代码为例:
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函数只能交换两个相同类型的值。
热心网友
时间:2022-06-23 23:26
传进去的是int等简单类型,是传值,值改变后,不会影响调用语句的值、只在该函数内有效。
而传数组就不是,是传址,值改变后,调用的语句的值也会改变。追问可是我并没有传她的引用,,,这里的R不是副本吗???
热心网友
时间:2022-06-23 23:26
第一个swap(r[i], r[j])是值传递, 第二个是引用传递