元组,c++11中引入的新的类型,可类比std::pair。 但是std::pair只能支持两个元素。 理论上, 元组支持0~任意个元素。
本文演示环境: VS2015 up3
0、头文件
#include <tuple>
1、创建和初始化
1.1、创建一个空的元组, 创建时,需要指定元组的数据类型。
std::tuple<int, float, double, long, long long> first;
1.2 、创建一个元组并初始化元组。
1 std::string str_second_1("_1");
2 std::string str_second_2("_2");
3
4 // 指定了元素类型为引用 和 std::string, 下面两种方式都是可以的,只不过第二个参数不同而已
5 std::tuple<std::string, std::string> second_1(str_second_1, std::string("_2"));
6 std::tuple<std::string, std::string> second_2(str_second_1, str_second_2);
1.3、创建一个元素是引用的元组
1 //3、创建一个元组,元组的元素可以被引用, 这里以 int 为例
2 int i_third = 3;
3 std::tuple<int&> third(std::ref(i_third));
1.4、使用make_tuple创建元组
1 int i_fourth_1 = 4;
2 int i_fourth_2 = 44;
3 // 下面的两种方式都可以
4 std::tuple<int, int> forth_1 = std::make_tuple(i_fourth_1, i_fourth_2);
5 auto forth_2 = std::make_tuple(i_fourth_1, i_fourth_2);
1.5、创建一个类型为引用的元组, 对元组的修改。 这里以 std::string为例
1 std::string str_five_1("five_1");
2 // 输出原址值
3 std::cout << "str_five_1 = " << str_five_1.c_str() << "\n";
4
5 std::tuple<std::string&, int> five(str_five_1, 5);
6 // 通过元组 对第一个元素的修改,str_five_1的值也会跟着修改,因为元组的第一个元素类型为引用。
7 // 使用get访问元组的第一个元素
8 std::get<0>(five) = "five_2";
9
10 // 输出的将是: five_2
11 std::cout << "str_five_1 = " <