• C++交换a和b的方法


    以下是用C++编写的交换a和b的六种方法:

    1. 方法一:使用临时变量

    #include 
    
    int main() {
        int a = 5;
        int b = 10;
    
        std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;
    
        int temp = a;
        a = b;
        b = temp;
    
        std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2. 方法二:使用加法和减法

    #include 
    
    int main() {
        int a = 5;
        int b = 10;
    
        std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;
    
        a = a + b;
        b = a - b;
        a = a - b;
    
        std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3. 方法三:使用异或运算

    编程语言中,a ^ b 通常表示a和b的异或运算,也称为“按位异或”。它是一个二进制运算符,对于每一位,如果两个操作数的对应位不同,则结果为1,否则为0。例如,对于a=5(二进制表示为101)和b=3(二进制表示为011),a ^ b的结果为6(二进制表示为110)。在集合论中,a ^ b通常表示a和b的对称差,即包含在a或b中但不同时包含在a和b中的元素的集合。

    #include 
    
    int main() {
        int a = 5;
        int b = 10;
    
        std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;
    
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
    
        std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4. 方法四:使用STL库中的swap函数

    STL库中的swap函数是一个通用的交换函数,可以用于交换任意两个对象的值。其定义如下:

    template void swap(T& a, T& b);
    
    • 1

    该函数接受两个参数,分别是要交换的两个对象的引用。在函数内部,它通过调用对象的移动构造函数和移动赋值运算符来实现交换。

    具体来说,swap函数会先调用对象的移动构造函数,将a的值移动到一个临时对象中,然后再调用a的移动赋值运算符,将b的值赋给a。最后,再调用b的移动赋值运算符,将临时对象中的值赋给b。这样就完成了a和b的值的交换。

    在底层实现上,swap函数通常会使用一个临时对象来完成交换。这个临时对象可以是一个栈上的对象,也可以是一个堆上的对象,具体取决于对象的类型和大小。对于较小的对象,可以使用栈上的临时对象来避免动态内存分配的开销;对于较大的对象,可以使用堆上的临时对象来避免栈溢出的问题。无论使用哪种方式,swap函数都会尽可能地优化交换操作,以提高性能。

    #include 
    #include 
    
    int main() {
        int a = 5;
        int b = 10;
    
        std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;
    
        std::swap(a, b);
    
        std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    以上四种方法都可以用来交换a和b的值,但它们的实现方式不同。其中,使用临时变量的方法是最常见的,但使用异或运算的方法也很有趣。使用STL库中的swap函数可以使代码更简洁。

    另外,还可以使用指针或引用来交换a和b的值。以下是使用指针的示例代码:

    5. 方法五:使用指针

    void swap(int* a, int* b) {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    
    int main() {
        int a = 5;
        int b = 10;
        swap(&a, &b);
        // 现在a的值为10,b的值为5
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这个示例中,swap函数接受两个指向整数的指针,然后交换它们所指向的值。在main函数中,我们创建了两个整数变量ab,然后调用swap函数并传递它们的地址。这样,swap函数就可以修改它们的值。

    6. 方法六:使用引用

    void swap(int& a, int& b) {
        int temp = a;
        a = b;
        b = temp;
    }
    
    int main() {
        int a = 5;
        int b = 10;
        swap(a, b);
        // 现在a的值为10,b的值为5
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这个示例中,swap函数接受两个整数的引用,然后交换它们的值。在main函数中,我们创建了两个整数变量ab,然后调用swap函数并传递它们作为引用。这样,swap函数就可以修改它们的值。

  • 相关阅读:
    ElasticSearch教程(详解版)
    qml保姆级教程一:布局组件
    【蓝桥杯选拔赛真题30】python计算倒数和 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
    CPU中断
    论文笔记:Skeleton Key: Image Captioning by Skeleton-Attribute Decomposition
    Python函数式编程
    从入门开始手把手搭建千万级Java算法测试-计数排序与快速排序的比较(常规快排)比较
    奶气萌娃的声音怎么做?一个简单的小方法,奶娃配音轻松拿捏
    Rust 从入门到精通06-语句和表达式
    算法leetcode|16. 最接近的三数之和(rust重拳出击)
  • 原文地址:https://blog.csdn.net/weixin_45824959/article/details/133689718