C++ swap宏

来源:互联网 发布:mac imovie教程 编辑:程序博客网 时间:2024/05/22 08:15

http://bbs.csdn.net/topics/330252958

目前了解到的有SWAP(val1, val2)三种,各有优缺点

#define SWAP(x, y) \
            do     \
            {      \
                (x) = (x) ^ (y) \
                (y) = (x) ^ (y); \
                (x) = (x) ^ (y); \
            } while (0)

#define SWAP(a, b) \
            do     \
            {      \
                typeof(a) tmp; \
                tmp = (a);     \
                (a) = (b);     \
                (b) = tmp;     \
            } while (0)

#define SWAP(m, n) \
            do     \
            {      \
                (x) = (x) - (y)\
                (y) = (x) - (y)\
                (x) = (x) + (y)\
            } while (0)

第一种:优点有,不用担心数据交换过程中出现溢出
        缺点有,不能实现float型数据的交换(无法处理含小数点数据)

第二种:优点是,相对第一种而言,他可以进行更多类型的数据交换
        缺点是,有少数编译器不支持typeof 关键字的用法

第三种:优点是,相对第二种而言,他不收编译器的限制,可以进行多种类型数据交换
        缺点是,在想x + y或x - y 过程中可能会溢出
原创粉丝点击