1、shared_ptr

shared_ptr除了最基本的可以用new初始化以外,还可以使用其他方式初始化。在使用一些c的api时候,这种初始化方式非常有用,如下

boost::shared_ptr<CURL> curl_(curl_easy_init(), curl_easy_cleanup);

上面这段代码用来初始化一个curl的shared_ptr。

2、promise,future

#include <boost/thread.hpp>
#include <boost/thread/future.hpp>
#include <iostream> using namespace std; int main()
{
boost::promise<int> pi;
boost::unique_future<int> fi;
fi=pi.get_future();
//等待2s,超时返回0,被promise被set返回1
cout << "wait over:" << fi.timed_wait(boost::posix_time::milliseconds(2000)) << endl;
//检查promise是否被set
cout << "is ready:" << fi.is_ready() << endl; pi.set_value(42);
cout << "wait over:" << fi.timed_wait(boost::posix_time::milliseconds(2000)) << endl;
cout << "is ready:" << fi.is_ready() << endl;
cout << fi.get() << endl;
} 上面代码运行结果为

future和promise配合可以应用在各种多线程环境下。

比如有些异步api(如zookeeper的watch),提高了编程难度。当我们想要并不要求效率,或者对时序有要求时,可以使用promise和future将这些异步api改为同步

int main()
{
boost::promise<int> pi;
boost::unique_future<int> fi = pi.get_future();
char content[1024] = "\0";
int size = 1024;
zoo_wget(zk_handle, path, callback, static_cast<void*>(&pi), content, &size, NULL));
fi.get();
} void callback(zhandle_t* zh, int type, int state, const char* path, void* watcherCtx)
{
boost::promise<int>* pi = static_cast<boost::promise<int>*>(watcherCtx);
pi->set_value(1);
}

3、regex

match

    boost::regex r("(a*)ddd(b*)ddd");
boost::smatch m;
if(boost::regex_match(string("aaaadddbbbddd"), m, r))
{
cout << m.size() << endl;
for(size_t i = 0; i < m.size(); ++i)
{
//0表示匹配到的整个字符串,1以后的index表示括号中匹配的内容
cout << m[i] << endl;
}
}

search

    boost::regex r("(a+)");
string content = "bbbaaaaacccaaaaddddaaaeeeaaa";
boost::smatch m;
string::const_iterator strstart = content.begin();
string::const_iterator strend = content.end();
while(boost::regex_search(strstart, strend, m, r))
{
//search到的结果,0表示整个,1以后表示括号的index匹配的结果
cout << m[1] << endl;
//从上次搜索到的地方接着搜索
strstart = m[0].second;
}

regex_token_iterator

 
    boost::regex r("(a)c");
string content = "bbbaaaaacccaaaaddddaaaeeeaaa";
//第四个参数0表示匹配到的整个字符串,1以后表示括号中的index,-1表示匹配除了本字符串以外的,可以用来分割字符串
boost::sregex_token_iterator iter(content.begin(), content.end(), r, -1);
boost::sregex_token_iterator end; for(; iter != end; ++ iter)
{
cout<< *iter << endl;
}

regex_replace

class func {
public:
func(vector<string> vec){
_vec = vec;
_index = 0;
}
string aaa(boost::match_results<std::string::const_iterator> match){
string aa = _vec[_index];
cout <<_index<<endl;
_index++;
cout <<_index<<endl;
return aa;
}
private:
vector<string> _vec;
int _index;
}; int main(int argc, char* argv[])
{
vector<string> test;
test.push_back("1");
test.push_back("2");
test.push_back("3");
test.push_back("4");
test.push_back("5");
test.push_back("6");
test.push_back("7");
std::string s="a ? b ?b c? d? e?";
std::string b="a ? b ?b c? d? e?";
std::cout << s << std::endl;
boost::regex reg("\\?"); func f(test);
boost::function<std::string (boost::match_results<std::string::const_iterator>)> function1 =
boost::bind(&func::aaa, &f, _1);
//替换s中的所有符合r的字符串
//第三个参数可以放一个函数对象或者boost::function类型,用来实现特殊逻辑
s=boost::regex_replace(s,reg,function1);
std::cout << s << std::endl;
return 0;
}

4、path

    namespace bf = boost::filesystem;
string my_path = "/";
bf::path file_path(my_path);
bf::directory_iterator end_iter;
//遍历目录下的文件
for (bf::directory_iterator file_itr(file_path); file_itr != end_iter; ++file_itr)
{
string fname = file_itr->path().filename().string();
cout << fname << endl;
}

boost库常用功能的更多相关文章

  1. c++学习书籍推荐《超越C++标准库:Boost库导论》下载

    <超越C++标准库Boost库导论>不仅介绍了Boost库的功能.使用方法及注意事项,而且还深入讨论了Boost库的设计理念.解决问题的思想和技巧以及待处理的问题.因此,本书是一本了解Bo ...

  2. 漫步Facebook开源C++库Folly之string类设计(散列、字符串、向量、内存分配、位处理等,小部分是对现有标准库和Boost库功能上的补充,大部分都是基于性能的需求而“重新制造轮子”)

    就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能的需求. 这里是folly的github地址:https:// ...

  3. iOS项目开发常用功能静态库

    YHDeveloperTools iOS项目开发常用功能静态库 查看源码 功能方法: 1.字符检查 [NSString checkStringWithType:Email andTargetStrin ...

  4. [C/C++] C/C++延伸学习系列之STL及Boost库概述

    想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...

  5. (九)boost库之文件处理filesystem

    (九)boost库之文件处理filesystem   filesystem库是一个可移植的文件系统操作库,它在底层做了大量的工作,使用POSIX标准表示文件系统的路径,使C++具有了类似脚本语言的功能 ...

  6. Boost库学习之旅入门篇

    学习及使用Boost库已经有一段时间了,Boost为我的日常开发中带来了极大的方便,也使得我越来越依赖于boost库了.但boost功能太多,每次使用还是得翻看以前的 资料,所以为了以后可以更方便的使 ...

  7. boost库的安装,使用,介绍,库分类

    1)首先去官网下载boost源码安装包:http://www.boost.org/ 选择下载对应的boost源码包.本次下载使用的是 boost_1_60_0.tar.gz (2)解压文件:tar - ...

  8. 详解 boost 库智能指针(scoped_ptr<T> 、shared_ptr<T> 、weak_ptr<T> 源码分析)

    一.boost 智能指针 智能指针是利用RAII(Resource Acquisition Is Initialization:资源获取即初始化)来管理资源.关于RAII的讨论可以参考前面的文章.在使 ...

  9. JavaScript 常用功能总结

    小编吐血整理加上翻译,太辛苦了~求赞! 本文主要总结了JavaScript 常用功能总结,如一些常用的JS 对象,基本数据结构,功能函数等,还有一些常用的设计模式. 目录: 众所周知,JavaScri ...

随机推荐

  1. 从串口驱动的移植看linux2.6内核中的驱动模型 platform device & platform driver【转】

    转自:http://blog.csdn.net/bonnshore/article/details/7979705 写在前面的话: 博主新开了个人站点:你也可以在这里看到这篇文章,点击打开链接 本文是 ...

  2. Linux C/C++内存泄漏检测工具:Valgrind

    Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和 ...

  3. 在libGDX中使用Spine骨骼动画

    首先,github是个宝库,实践流的读者可以直接看例子进行学习 1.这是Spine官方给出的例子 https://github.com/EsotericSoftware/spine-superspin ...

  4. 性能优化之基础资源cpu&内存(JVM)

    本章主要介绍计算机的一些基础资源以及操作系统处理后的一些基础资源. 主要包括 cpu 内存 磁盘 网络 线程 本章会介绍这些资源的一些原理,介绍如何查看资源的数量,使用情况,对性能和整体计算机执行的一 ...

  5. 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)B 杨老师的游戏【暴力/next-permutation函数/dfs】

    链接:https://www.nowcoder.com/acm/contest/116/B 来源:牛客网 题目描述 杨老师给同学们玩个游戏,要求使用乘法和减法来表示一个数,他给大家9张卡片,然后报出一 ...

  6. 如何理解java反射?

    一.反射基本概念 反射之中包含了一个"反"的概念,所以要想解释反射就必须先从"正"开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产 ...

  7. zclip笔记:解决zclip失效问题

    在一个子页面里想实现一键复制到剪贴版的功能,使用zclip插件,用jquery的方式实现时出现了诡异问题.复制功能平时正常,当页面中所列的内容过多时,一键复制的功能失效. 这个问题相当不好定位,先说结 ...

  8. Handler嵌套--可以

    package com.example.handlernestdemo; import android.support.v7.app.ActionBarActivity; import android ...

  9. Python学习笔记——基本数据结构

    列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...

  10. centos查找文件

    centos查找文件 [root@localhost ~]# find / -name libmysqlclient.so