• ref引用不可以复制的对象

     void print(std::ostream &os, int i)
    {
    os << i << endl;
    } //ref引用不可以复制的对象
    void main1()
    {
    vector<int> myint = { ,,,, };
    //cout是不可以拷贝的对象,以下出错
    //boost::function<void(int)> pt = boost::bind(print, cout, _1);
    //ref可以引用不可以复制的对象
    boost::function<void(int)> pt = boost::bind(print,boost::ref(cout), _1);
    for_each(myint.begin(), myint.end(), pt);
    cin.get();
    }
  • 底层是基于hasn的unordered_set集合
     //底层是基于hasn的unordered_set集合
    void main5()
    {
    boost::unordered_set<string> myhash;
    myhash.insert("");
    myhash.insert("1234a");
    myhash.insert("1234b");
    for (auto ib = myhash.begin(), ie = myhash.end(); ib != ie; ib++)
    {
    cout << *ib << endl;
    }
    cin.get();
    }
  • 独享智能指针
     void main6()
    {
    boost::scoped_ptr<int> p1(new int());//智能指针
    boost::scoped_ptr<int> p2(new int[]);//智能指针,可以分配但是不推荐
    //不可以这样,因为是独享内存
    //boost::scoped_ptr<int> p3 = p2;
    //释放
    p2.reset();
    //重新分配内存
    p2.reset(new int());
    //获取第一个
    cout << *p2.get() << endl; //智能指针,存储数组
    boost::scoped_array<int> p(new int[]);
    p[] = ;
    *p.get() = ;
    //释放内存
    p.reset();
    //重新分配内存
    p.reset(new int[]);
    cin.get();
    }
  • 共享智能指针
     class AobjC
    {
    public:
    AobjC()
    {
    cout << "构造" << endl;
    }
    ~AobjC()
    {
    cout << "析构" << endl;
    }
    protected:
    private: }; void main7()
    {
    //共享内存
    boost::shared_ptr<AobjC> p1(new AobjC);
    boost::shared_ptr<AobjC> p2(new AobjC);
    //浅拷贝
    boost::shared_ptr<AobjC> p3(p2);
    p3.reset();
    p3.reset(new AobjC);
    //计数
    p3.use_count(); boost::shared_array<AobjC> p4(new AobjC[]);
    cin.get();
    }
  • 多线程不能用shared_ptr,要用weak_ptr
     //shared智能指针,多线程不安全
    //DWORD WINAPI printout(LPVOID p)
    //{
    // boost::shared_ptr<int> *pint = static_cast<boost::shared_ptr<int>*>(p);
    // for (int i = 0; i < 5; i++)
    // {
    // cout << **pint << endl;
    // Sleep(1000);
    // }
    // return 0;
    //}
    //
    //DWORD WINAPI reset(LPVOID p)
    //{
    // boost::shared_ptr<int>*pint = static_cast<boost::shared_ptr<int>*>(p);
    // //释放内存
    // pint->reset();
    // return 0;
    //} DWORD WINAPI printout(LPVOID p)
    {
    //weak_ptr接管指针
    //传递的是int指针的地址,所以要用boost::weak_ptr<int> *pw(多一个*保存)
       //传递地址要多加一个*(指针要多一级,便于多一次读取,第一次读存储的地址,第二次读内容)
    boost::weak_ptr<int> *pw = static_cast<boost::weak_ptr<int>*>(p);
    //弱指针可以锁定,防止多线程访问一个被释放的内存
    boost::shared_ptr<int> newp = pw->lock();
    for (int i = ; i < ; i++)
    {
    if (newp)
    {
    cout << *newp << endl;
    }
    else
    {
    cout << "内存释放无法访问" << endl;
    }
    Sleep();
    }
    return ;
    } DWORD WINAPI reset(LPVOID p)
    {
    Sleep();
    boost::shared_ptr<int>*pint = static_cast<boost::shared_ptr<int>*>(p);
    //释放内存
    pint->reset();
    return ;
    } void main()
    {
    boost::shared_ptr<int> p1(new int());
    //帮助在多线程中实现内存保护,没有重载*运算符
    boost::weak_ptr<int> p2 = p1;
    HANDLE threads[];
    threads[] = CreateThread(, , reset, &p1, , );
    threads[] = CreateThread(, , printout, &p2, , );
    //C++11也有weak_ptr
    //std::weak_ptr;
    cin.get();
    }
  • 正则表达式
     //正则表达式
    void main2()
    {
    string str = "china8848english";
    boost::regex expr("\\w+\\d+\\w+");//w+字符 d+数字
    cout << boost::regex_match(str, expr);
    cin.get();
    } //找出匹配的
    void main3()
    {
    string str = "china8engli5sh";
    boost::regex expr("(\\w+)\\d(\\w+)");
    //保存匹配的
    boost::smatch what;
    if (boost::regex_search(str, what, expr))
    {
    cout << what[] << endl;
    cout << what[] << endl;
    }
    else
    {
    cout << "fail";
    }
    } //替换
    void main4()
    {
    string str = "china8engli5sh";
    boost::regex expr("(\\w + )\\d(\\w + )");
    string rp = "--------";
    cout << boost::regex_replace(str, expr, rp);
    }

10.ref regex unordered_set smartpoint的更多相关文章

  1. 10 ref 和 out 之间的差别

    (1) 两者都是按地址传递的,使用后都将改变原来的数值 (2) ref传进去的參数必须在调用前初始化,out不必 (3) ref传进去的參数在函数内部能够直接使用,而out不可 (4) ref传进去的 ...

  2. .net正则表达式大全(.net 的 System.Text.RegularExpressions.Regex.Match()方法使用)

    正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET的System.dll类库提供的System.Text.RegularExpression ...

  3. Vue学习笔记:Ref的使用

    官网上的说明 1.了解Vue中的$refs在Vue中是怎么访问到DOM元素的 <div id="app"> <h1>{{ message }}</h1 ...

  4. Regex分组与Pattern正则表达式对象

    1.正则规则:        1.String  regex  =  "[1-9]"          表示单个字符的取值范围是 1~9,注意是单个字符的取值范围        2 ...

  5. Django之Model操作

    Django之Model操作 本节内容 字段 字段参数 元信息 多表关系及参数 ORM操作 1. 字段 字段列表 AutoField(Field) - int自增列,必须填入参数 primary_ke ...

  6. django之一些feature

    前端之django一些feature 本节内容 cookie session 跨站请求保护 分页 序列化 model模块 CBV和FBV 模板渲染对象 1. cookie cookie 是一种发送到客 ...

  7. 【Django】--Model字段

    参考地址:http://www.cnblogs.com/wupeiqi/articles/6216618.html 所有字段 AutoField(Field) --int自增列,必须填入参数prima ...

  8. Python-Django进阶

    1. 路由系统 浏览器会自动给url后加一个"/" django会自动给路由的正则表达式前面加一个"/" django会给任何不带"/"结尾 ...

  9. 推荐的PHP编码规范

    推荐的PHP编码规范 发布时间: 2014-05-7 浏览次数:2754 分类: PHP教程 推荐的PHP编码规范 一 编辑器设置 1. 使用Tab缩进,不要使用空格 鉴于很多编辑器在保存文件时会自动 ...

随机推荐

  1. ROW_NUMBER (Transact-SQL)

    SELECT ROW_NUMBER() OVER ( ORDER BY MemberID DESC ) , * FROM dbo.tbm_mem_Member_Beneficiary ORDER BY ...

  2. DNS隧道工具汇总——补充,还有IP over DNS的工具NSTX、Iodine、DNSCat

    github上有一堆的工具:https://github.com/search?utf8=%E2%9C%93&q=DNS+tunnel+&type= DNS隧道大检阅 研究了一天的DN ...

  3. 卷积操作中的矩阵乘法(gemm)—— 为什么矩阵乘法是深度学习的核心所在

    1. 全连接 k 个输入: n 个神经元: 每个神经元都会学到一组权值向量,以和输入进行内积运算: n 个输出: 2. 卷积 卷积操作对于高维(多个平面)的输入,单个卷积核的深度应和输入的深度(dep ...

  4. js 转化为几天前,几小时前,几分钟前...

    转换标准时间为时间戳: function getDateTimeStamp(dateStr){ return Date.parse(dateStr.replace(/-/gi,"/" ...

  5. python黏包现象

    #黏包:发送端发送数据,接收端不知道应如何去接收造成的一种数据混乱现象. #关于分包和黏包: #黏包:发送端发送两个字符串"hello"和"word",接收方却 ...

  6. Python 函数(二)

    参数 以下是调用函数时可使用的正式参数类型: 必备参数 关键字参数 默认参数 不定长参数 必备参数 必备参数须以正确的顺序传入函数.调用时的数量必须和声明时的一样. 调用printme()函数,你必须 ...

  7. iOS保持流畅有哪些秘诀? 除了黑科技GPU还有这些重要原因 期待安卓8.0流畅度逆袭

    经常有人提起iPhone使用起来要比Android手机流畅,现在谈谈为什么iOS使用中会让人觉得更加流畅一些.一方面iPhone的顶级硬件为iOS的流畅打好了基础,另一方面,专一定制的系统是保证体验的 ...

  8. ZBrush 4R7中自定义笔刷

    为了便于雕刻,ZBrush®很人性化地设计了自定义笔刷.随着ZBrush软件版本不断更新,功能也在不断完善.只是在笔刷面板ZBrush软件就为用户提供了上百种之多,如果我们想要用某种笔刷,一个个找起来 ...

  9. XMind双十一会放什么大招?

    XMind一直是一款备受欢迎的思维导图软件,同时也是一款开源思维导图软件,以强大的免费功能为支持,向用户提供极致的使用体验.XMind现在分别有XMind免费版(XMind Free),XMind专业 ...

  10. Eclipse中使用GIT提交文件至本地

    GIT提交文件至本地: 1.  右击项目——Team——Commit…: 2.在弹出的Commit Changes框中——选择要提交的文件——填写提交说明——点击Commit,即可提交至本地.