c++ 11 14 17 20后的新特性总结二:无序容器、元组、正则表达式

1.容器

#include <forward_list>//单向链表
#include <list>
    //有序容器
#include <map>
#include <set>
    //无序容器
#include <unordered_set>
#include <unordered_map>

auto tupleFoo(int num)
{
    if(0 == num)
        return std::make_tuple(13, "Jon", "js");
    if(1 == num)
        return std::make_tuple(14, "Wendy", "sh");
    if(2 == num)
        return std::make_tuple(12, "Keiven", "hongkong");
}

void container_run()
{
    //线性容器
#include <array>
    const int arr_len = 5;//or constexpr int arr_len = 4;
    std::array<int, arr_len> arr = {11,2,23,4};
    if(arr.empty())
    {

    }
    else
    {
        cout<<arr.size()<<endl;
        std::sort(arr.begin(), arr.end(), [](int a, int b){
            return a > b;
        });

        for(auto i:arr)
            cout<<i<<endl;
    }
//unordered container
    std::unordered_map<int, string> mmp = {
        {1, "z"},
        {6, "y"},
        {3, "c"}
    };

    for(auto i:mmp)
        cout<<i.first<<endl;
}

2.元组

#include <tuple>
    /*元组
     *std::make_tuple:构造元组
     * std::get:获取元组某个位置的值
     * std::tie:元组拆包
     * std::tuple_cat:元组合并
     * std::tuple_size:元组大小
    */
    auto student = tupleFoo(1);
    cout<<std::get<2>(student)<<endl;
    cout<<std::get<int>(student)<<endl;//std::get<string>(student):编译错误(student元组中存在多个string类型)
    auto new_student = std::tuple_cat(student, tupleFoo(0));
    cout<<std::tuple_size<decltype(new_student)>::value<<endl;
    int age;string name,hometown;
    std::tie(age, name, hometown) = tupleFoo(2);
    cout<<age<<" "<<name<<" "<<hometown<<endl;
}

void inteligence_ptr()
{
#include <memory>
    /*std::shared_ptr强指针
     * use_count:引用计数
     * get:返回原始指针
     * reset:清除当前指针引用(use_count=0),其他智能指针(use_count-1)
     * */
    auto pointer = std::make_shared<int>(10);
    cout<<"pointer reference & :"<<pointer.use_count()<<endl;
    auto pointer1 = pointer;
    cout<<pointer1.use_count()<<endl;
    auto p = pointer.get();
    cout<<pointer.use_count()<<endl;

    auto pp = pointer1;
    cout<<pp.use_count()<<"raw pointer:"<<pointer.use_count()<<endl;
    pointer.reset();//pointer.use_count()==0
    cout<<pointer1.use_count()<<endl;//其他pointerX:use_count-=1;
    cout<<pointer.use_count()<<endl;

    /*std::unique_ptr独占指针
     *独占智能指针,禁止其他智能指针共享同一个对象
    */
    auto unique_ptr = std::make_unique<int>(6);
    auto unique_ptr_1 = std::move(unique_ptr);//必须使用右值引用,才能转移给其他ptr;
    //auto unique_ptr_2 = unique_ptr_1;禁止共享

    /*std::weak_ptr弱指针
     *弱引用不会引起引用计数增加
     * std::weak_ptr 没有* 运算符和-> 运算符,所以不能够对资源进行操作,它的唯一作用就是用于
        检查std::shared_ptr 是否存在,其expired() 方法能在资源未被释放时,会返回true,否则返回
        false。
    */
    std::weak_ptr<int> weakPtr = pointer1;
    cout<<"weak ptr :"<<pointer1.use_count()<<endl;
}

3.正则表达式

#include <regex>
void RegEx()
{
    //正则表达式-regular expression
    /*std::regex:正则表达式形式
     *std::regex_match(std::string, std::regex):判断是否匹配正则形式,返回true/false
     *std::smatch:std::regex中的N个元素(std::regex_match(std::string, std::smatch, std::regex))
    */
    std::string str[] = {"abc.txt", "123.txt", "q-a.txt"};
    std::regex txt_regex("[a-z]+\.txt");
    for(const auto &i:str)
        cout<<i<<" is match :"<<(std::regex_match(i, txt_regex)?"true":"false")<<endl;

}
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇塞~哇塞~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值