鱼cpython学习者 发表于 2021-10-17 11:26:16

c++优雅地交换元素

写排序算法,每次都要引入一个中间变量,让我感觉很不爽,有没有能够优雅地交换c++数组中两个元素的的方法?

人造人 发表于 2021-10-17 12:16:15

这样优雅吗?
#include <iostream>

void swap(int &a, int &b) {
    if(a == b) return;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

int main() {
    int x = 123, y = 456;
    swap(x, y);
    std::cout << x << std::endl;
    std::cout << y << std::endl;
    return 0;
}

Gacy 发表于 2021-10-17 13:31:00

人造人 发表于 2021-10-17 12:16
这样优雅吗?

好优雅{:10_254:}

傻眼貓咪 发表于 2021-10-17 14:28:04

本帖最后由 傻眼貓咪 于 2021-10-17 15:04 编辑

这是位元算法:a^a^b = b

人造人 发表于 2021-10-17 14:52:33

傻眼貓咪 发表于 2021-10-17 14:28
这是位元算法:a^a^b = a

a ^ a ^ b = b
a ^ b ^ a = b
a ^ b ^ b = a
^_^


#include <iostream>

int main() {
    int a = 123, b = 456;
    std::cout << (a ^ a ^ b) << std::endl;
    std::cout << (a ^ b ^ a) << std::endl;
    std::cout << (a ^ b ^ b) << std::endl;
    return 0;
}

傻眼貓咪 发表于 2021-10-17 15:05:17

人造人 发表于 2021-10-17 14:52


已修改,太久没有写 C++,生疏了{:5_109:}

傻眼貓咪 发表于 2021-10-17 15:17:02

自从学会了 Python
另外再学些 HTML、CS、JS、SQL、单片机
C/C++ 语言就好象在跟我说再见似的,所以程序语言必须天天做啊~{:10_265:}

鱼cpython学习者 发表于 2022-5-29 18:28:06

人造人 发表于 2021-10-17 12:16
这样优雅吗?

来迟的最佳答案{:10_277:}
页: [1]
查看完整版本: c++优雅地交换元素