C++ 中的 std::pair 和 std::tuple

C++ 中的 std::pair 和 std::tuple

最近在看 C++ 11 的标准,发现了 std::pair 和 std::tuple。 感觉这两个非常有用。就在这里记录一下。

std::pair 出现的比较早,最早是出现在 STL 中。定义在头文件 utility 中。
std::tuple 可以说是 std::pair 的增强版本。在 C++11 中引入的。定义在头文件 tuple 中。
简单的说 std::pair 可以将两个不同类型的数据绑定成一个对象。std::tuple 可以将 N 个不同的数据绑定成一个对象。这两个类都是模板类。在没有 std::pair 之前,为了将两个变量绑定在一起,我们只能定义一个结构体。用这个结构体来存放这两个数据。有了 std::pair 我们就可以省掉定义结构体这一步了。 std::tuple 也是一样。
下面是使用 std::pair 的几个简单的例子:

#include
std::pair  f;  //空构造
f = std::make_pair(10, 20.9);  //赋值
std::pair  f1(100,5.8);  //赋值构造
std::vector> arr;  //嵌套使用
int i = f.first; //返回第一个值
float a = f.second;  //返回第二个值

我个人认为 std::pair 和 std::tuple 最大的用途是用在函数返回值。我们知道 C++ 的函数只能返回一个值。如果我们要返回多个值,传统的办法是定义一个结构体。通过返回结构体的方法来返回多个值。或者就是利用函数的参数传指针或者引用,用函数参数来传出结果。这两种方法都没有 std::pair 或者 std::tuple 方便。

这里还要提到 std::tie() 函数,这个函数可以临时将几个变量绑定成一个 std::tuple。下面是个例子:

#include 
std::tuple foo_tuple()
{
// return {1, -1}; // Error until N4387
// return std::tuple{1, -1}; // Always works
 return std::make_tuple(1, -1); // Always works
}
std::pair foo_pair()
{
    return std::make_pair(1, 2.0);
}

int main(int argc, char *argv[])

{
    int t1;
    double b1;
    std::tie(t1, b1) = foo_tuple();
    qDebug() << t1 << b1;
    std::tie(t1, b1) = foo_pair();
    qDebug() << t1 << b1;
}

从这个例子也能看出,std::pair 是一个特殊的 std::tuple。所以也可以用 std::tie。

你可能感兴趣的:(编程杂项,c++,开发语言)