偶然发现一种用 C++ 一行实现两个变量交换的方法,特此分享给大家。
问题
假设有两个变量 a 和 b,如何交换两个变量的值呢?
比较常规的做法是定义一个中间变量,通过它来交换两个变量。这也是在本科刚学C语言时,教科书上常用的案例。
int tmp;
tmp = a;
a = b;
b = tmp;
然而,我们知道在 Python 中,这四行代码可以浓缩成一行,非常简洁
a, b = b, a
于是,很自然会问,C++ 中能否用一行代码来实现同样的操作呢?
具体方法
引入 C++11 新标准后,我们可以用如下的代码来简化代码:
std::tie(a, b) = std::make_tuple(b, a);
解释
在 C++11 引入了 tuple 数据类型,其定义及相关函数均在名为 “tuple” 的头文件中。tuple,即元组,是一个模板类,可以看成是一个方便的,用来储存多种数据的容器,其中储存的数据可以是不同的类型。
一方面,make_tuple() 函数构造了一个 tuple 类,将 a, b 的值储存在一个 tuple 里面。
另一方面 tie() 函数也构造了一个 tuple 类,与 make_tuple() 不同的是,tie()函数构造的 tuple 类中储存的是 a,b 的引用,可以作为左值,于是就有了上面的代码。