在 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