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

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

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

在C++中,当需要从函数中返回多个值时,可以使用元组(tuple)和对(pair)。元组是一种通用的类模板,可以用来存储任意数量的对象,而对则是元组的一种特殊情况,仅包含两个对象。

std::tuple

在使用元组之前,需要包含头文件<tuple>。元组的类型定义在名字空间std中,因此需要加上命名空间限定符。

创建元组

创建元组的语法非常简单,只需要使用一对圆括号即可。元组中可以存放不同类型的对象,例如:

std::tuple<int, double, std::string> my_tuple(42, 3.14, "hello");
访问元组

可以使用std::get函数访问元组中的元素,需要指定元素的索引:

int my_int = std::get<0>(my_tuple);       // 42
double my_double = std::get<1>(my_tuple); // 3.14
std::string my_string = std::get<2>(my_tuple); // "hello"

也可以使用结构化绑定(structured binding)语法访问元组中的元素:

auto [my_int, my_double, my_string] = my_tuple;
修改元组

元组是一个不可变的对象,不过可以通过拷贝和赋值创建一个新的元组。可以使用std::make_tuple函数创建新的元组:

auto new_tuple = std::make_tuple(10, 20.0, "world");

也可以使用std::tuple_cat函数将两个元组合并为一个新元组:

auto merged_tuple = std::tuple_cat(my_tuple, new_tuple);
std::pair

对是元组的一种特殊情况,仅包含两个对象。

创建对

创建对的语法也非常简单,只需要使用一对花括号即可。例如:

std::pair<int, double> my_pair {42, 3.14};

也可以通过std::make_pair函数创建对:

auto new_pair = std::make_pair(10, 20.0);
访问对

可以使用std::get函数或结构化绑定语法访问对中的元素:

int my_int = std::get<0>(my_pair);       // 42
double my_double = std::get<1>(my_pair); // 3.14

auto [my_int, my_double] = my_pair;
修改对

对也是不可变的对象,不过可以通过拷贝和赋值创建一个新的对。例如:

auto new_pair = my_pair;
new_pair.first = 10;
new_pair.second = 20.0;
从函数返回元组和对

在函数中返回元组或对可以用来返回多个值。例如,下面的函数返回一个对,包含两个整数:

std::pair<int, int> get_random_numbers() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dist(1, 100);
    return {dist(gen), dist(gen)};
}

int main() {
    auto [a, b] = get_random_numbers();
    std::cout << "a = " << a << ", b = " << b << std::endl;
}

另外一个例子,下面的函数返回一个元组,包含一个整数和一个字符串:

std::tuple<int, std::string> get_data() {
    int my_int = 42;
    std::string my_string = "hello";
    return std::make_tuple(my_int, my_string);
}

int main() {
    auto [num, str] = get_data();
    std::cout << "num = " << num << ", str = " << str << std::endl;
}
总结

使用元组和对可以方便地从函数中返回多个值。元组可以为任意类型的对象提供通用的容器,对则仅包含两个对象,更加简单直观。在使用元组和对时,需要注意它们是不可变的对象,只能通过拷贝和赋值创建新的元组或对。