关于swap函数
  • 板块学术版
  • 楼主封禁用户
  • 当前回复22
  • 已保存回复22
  • 发布时间2022/6/17 15:06
  • 上次更新2023/10/27 23:10:23
查看原帖
关于swap函数
691542
封禁用户楼主2022/6/17 15:06

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=108n=10^8 即可。)

但是我发现 #define STL 后:

运行成功 1588ms 808kb

#undef STL后:

运行成功 533ms 808kb

请问所谓的汇编一样,那么为啥会有三倍的效率差距。

2022/6/17 15:06
加载中...