📜  std :: tuple,std :: pair |在C++中使用元组和对从函数返回多个值(1)

📅  最后修改于: 2023-12-03 15:35:09.332000             🧑  作者: Mango

在 C++ 中使用元组和对从函数返回多个值

在 C++ 中有时需要从函数返回多个值,传统的方式是使用 out 参数或通过结构体返回。但这种方式往往比较麻烦,不能很好地表达语义,而且代码量也比较大。这时候就可以使用元组和对来解决问题了。

元组

元组是一个标准库中的模板类,它可以包含多个不同类型的值。元组可以使用 std::make_tuple 函数创建,也可以直接使用 {} 创建,如下所示:

#include <tuple>

std::tuple<int, float, std::string> myTuple = std::make_tuple(42, 3.14f, "Hello");
std::tuple<int, int> myPair = {1, 2};

元组的访问可以通过下标或者 std::get 函数进行,如下所示:

int anInt = std::get<0>(myTuple);
float aFloat = std::get<1>(myTuple);
std::string aString = std::get<2>(myTuple);

int first = std::get<0>(myPair);
int second = std::get<1>(myPair);

元组比较灵活,可以在运行时动态添加或删除元素,也可以通过 std::tie 函数将元组中的值一次性赋值到多个变量中,如下所示:

myTuple = std::tuple_cat(myTuple, std::make_tuple(true));
bool aBool;
std::tie(anInt, aFloat, aString, aBool) = myTuple;

对是一个简单的结构体,只有两个元素。使用 std::make_pair 函数可以创建一个对,如下所示:

#include <utility>

std::pair<int, std::string> myPair = std::make_pair(42, "Hello");

对的访问可以通过 .first 和 .second 进行,如下所示:

int theInt = myPair.first;
std::string theString = myPair.second;

对比较简单,适用于只需要返回两个值的情况。

从函数中返回元组或对

从函数中返回元组或对很简单,只需要在函数定义中使用 std::tuple 或 std::pair 作为返回类型即可,如下所示:

std::tuple<int, float> myFunction(int arg)
{
    // ...
    return std::make_tuple(42, 3.14f);
}

std::pair<int, std::string> myOtherFunction()
{
    // ...
    return std::make_pair(42, "Hello");
}

返回时可以直接使用 {} 或 std::make_tuple/std::make_pair 函数创建,如下所示:

std::tuple<int, float> myFunction(int arg)
{
    // ...
    return {42, 3.14f};
}

std::pair<int, std::string> myOtherFunction()
{
    // ...
    return std::make_pair(42, "Hello");
}

调用函数时,可以使用 std::get 或 .first/.second 进行访问,如下所示:

int theInt;
float theFloat;
std::tie(theInt, theFloat) = myFunction(7);

int anotherInt = myOtherFunction().first;
std::string anotherString = myOtherFunction().second;
总结

使用元组和对可以方便地从函数中返回多个值,并且代码量比传统方式更少,语义更加清晰。元组比较灵活,可以动态添加或删除元素,同时可以一次性赋值给多个变量。对比较简单,适用于只需要返回两个值的情况。