线性容器
std::array 大小固定,可以与c兼容 &arr[0],有如size()、sort()函数
std::forward_list 列表容器 单向链表实现,常数复杂度插入
无序容器 内部通过Hash表实现,插入和搜索元素的平均复杂度为常数
std::unordered_map/std::unordered_multiset
unordered_set / unordered_multiset
元组
make_tuple<T,U,...> 构造元组
tie<t1,u1..> 元组拆包
get<index>(tuple) 获取tuple元组 第index个
运行期索引 get必须传入常数才行
c++17中引用variant<> 可以使用tuple_index(tuple1,index)来获取对应元素
#include <variant>
template <size_t n, typename... T>
constexpr std::variant<T...> _tuple_index(const std::tuple<T...>& tpl, size_t i) {
if constexpr (n >= sizeof...(T))
throw std::out_of_range("越界.");
if (i == n)
return std::variant<T...>{ std::in_place_index<n>, std::get<n>(tpl) };
return _tuple_index<(n < sizeof...(T)-1 ? n+1 : 0)>(tpl, i);
}
template <typename... T>
constexpr std::variant<T...> tuple_index(const std::tuple<T...>& tpl, size_t i) {
return _tuple_index<0>(tpl, i);
}
template <typename T0, typename ... Ts>
std::ostream & operator<< (std::ostream & s, std::variant<T0, Ts...> const & v) {
std::visit([&](auto && x){ s << x;}, v);
return s;
}
合并元组 tuple_cat()
auto new_tuple = std::tuple_cat(get_student(1), std::move(t));
迭代 tuple_len()获取长度,利用tuple_index()获取0到index-1的元素
for(int i = 0; i != tuple_len(new_tuple); ++i)
// 运行期索引
std::cout << tuple_index(i, new_tuple) << std::endl;