学习C++新特性(三) (容器)

线性容器

  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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值