元组
自从C++11起,标准库引入了一个名为std::tuple的模板类,它允许存储不同类型的元素。
相对于其他容器的特点:
固定大小:一旦创建,元组的大小和类型集合就不能改变。
类型安全:每个元素的类型在编译时确定,并且可以通过模板参数指定。
异构性:元组内的元素类型可以各不相同。
访问元素:可以通过std::get函数或者基于索引的访问(C++14起)来访问元组中的特定元素,索引是从0开始的。
构造:元组可以通过直接初始化、使用std::make_tuple函数或者其它构造方法来创建。
比较:元组之间支持比较操作,比较是按元素逐个进行的,遵循字典序。
元组的使用流程
- 使用元组需要加入头文件<tuple>
- 元组的定义及初始化
- 元组的使用
加入头文件
#include<tuple>
元组的定义及初始化
std::tuple<int, char>first{ 22, 'a' };
std::tuple<int, char>secend = std::make_tuple( 22,'a' );
元组的使用
访问元组里的元素
(1)使用get函数
#include<iostream>
#include<tuple>
int main()
{
std::tuple<int, char>first{ 22, 'a' };
std::cout << std::get<0>(first)<<std::endl;
std::cout << std::get<1>(first)<< std::endl;
return 0;
}
//输出结果是
//22
//a
(2)使用tie
#include<iostream>
#include<tuple>
int main()
{
std::tuple<int, char>first{ 22, 'a' };
int a;
char b;
std::tie(a, b) = first;
std::cout << a << b;
return 0;
}
//输出结果是
//22a
(3)使用auto(C++17后可以使用)
#include<iostream>
#include<tuple>
int main()
{
std::tuple<int, char>first{ 22, 'a' };
auto[a, b] = first;
std::cout << a << b;
return 0;
}
//输出结果是
//22a
元组的比较
#include<iostream>
#include<tuple>
int main()
{
std::tuple<int, char>first{ 22, 'a' };
std::tuple<int, char>secend{ 2, 'a'};
if (first < secend)
{
std::cout << "first<secend";
}
else if (first > secend)
{
std::cout << "first>secend";
}
else
{
std::cout << "first=secend";
}
return 0;
}
//输出的结果是
//first>secend
元组的比较需要两个元组的元素个数相同,从前到后的元素类型一致或者是可比较的原型
拼接元组
使用std::tuple_cat
#include<iostream>
#include<string>
#include<tuple>
int main()
{
std::tuple < char, char >first{ 's', 'a'};
std::tuple < std::string, char > secend{ "sfl", 'a' };
auto tuple = std::tuple_cat(first, secend);
return 0;
}
比较的元组
使用swap
#include<iostream>
#include<string>
#include<tuple>
int main()
{
std::tuple < char, char >first{ 's', 'a'};
std::tuple < char, char > secend{ 'c', 'a'};
first.swap(secend);
std::cout << get<0>(first);
return 0;
}
//输出结果是
//c
交换这两个元组必须拥有相同的类型和元素个数