Rt,之前在某帖子中(找不到了),一个人使用 a^=b^=a^=b 导致挂分,于是我再也没有手写过swap。
后来,某次膜你赛中我发现手写的比系统的要快,于是提问原因。
结果某巨佬说是波动,汇编是一样的,甚至好像发了截图(?)
今天闲的慌,于是在洛谷在线IDE上测试了以下代码:
#include <stdio.h>
#include <algorithm>
#ifdef STL
using std::swap;
#else
void swap(int &_x,int &_y){
int _t=_x;
_x=_y;
_y=_t;
return;
}
#endif
int n,x,y,z;
int main(){
scanf("%d %d %d %d",&n,&x,&y,&z);
while(n--){
swap(x,y);
if(n&1)
swap(y,z);
else
swap(x,z);
}//之所以这么离谱就是为了编译器别把这一段优化成O(1)了
printf("%d %d %d",x,y,z);
return 0;
}
(输入随便,只要 n=108 即可。)
但是我发现 #define STL 后:
运行成功 1588ms 808kb
再#undef STL后:
运行成功 533ms 808kb
请问所谓的汇编一样,那么为啥会有三倍的效率差距。