C++ 一種交換兩個數的思路

mkckr0發表於2023-01-12

在 Lua 或者 Python 中可以使用多值賦值語句來交換兩個數。例如:a, b = b, a。在 C++ 中有沒有類似的操作?

先解析一下多值賦值的原理,a, b = b, a 等價於

t1, t2 = b, a
a, b = t1, t2

可以看到多值賦值還是用到了中間變數,而且還是兩個。想到兩個變數,可以聯想到 C++ 中的 std::pair,可以用 std::make_pair(b, a) 構造中間變數,來完成上述第 1 條語句的功能。中間變數是 std::pair 型別。如何將 std::pair 的兩個元素賦值給 a 和 b ? 可以利用 std::tie 對 std::pair 進行 unpack。示例程式碼如下:

#include <iostream>
#include <tuple>

int main()
{
    int a = 1, b = 2;
    std::tie(a, b) = std::make_pair(b, a);
    std::cout << a << " " << b << std::endl;
}

成功輸出:

2 1

這種方法也和多值賦值一樣可以適用於多個數的交換。例如讓 a、b、c、d 四個數左迴圈交換一次(全部往左邊挪一個位置)。示例程式碼如下:

#include <iostream>
#include <tuple>

int main()
{
    int a = 1, b = 2, c = 3, d = 4;
    std::tie(a, b, c, d) = std::make_tuple(b, c, d, a);
    std::cout << a << " " << b << " " << c << " " << d << std::endl;
}

成功輸出:

2 3 4 1

相關文章