博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记之:Boost程序库完全开发指南(ch5-16)
阅读量:5876 次
发布时间:2019-06-19

本文共 7579 字,大约阅读时间需要 25 分钟。

第5章

lexical_cast介绍

测试代码:

View Code
#include <iostream>
#include <
string>
#include <boost/lexical_cast.hpp>
using 
namespace std;
using 
namespace boost;
void test1(){
    
int x=lexical_cast<
int>(
"
100
");
    
long y=lexical_cast<
long>(
"
2000
");
    
float pai=lexical_cast<
float>(
"
3.14159e5
");
    
double e=lexical_cast<
double>(
"
2.71828
");
    cout<<x<<
"
 
"<<y<<
"
 
"<<pai<<
"
 
"<<e<<endl;
    
string str=lexical_cast<
string>(
456);
    cout<<str<<endl;
    cout<<lexical_cast<
string>(
0.6810)<<endl;
    cout<<lexical_cast<
string>(
0x10)<<endl;
}
int main(){
    test1();
}

boost中的format格式化输出库

format中为什么使用操作符重载

为什使用%

format格式化语法

测试代码:

View Code

format的性能

boost中的字符串算法string_algo

string_algo概述,其中包括五大类算法:大小写转换,判断式与分类,修剪,查找与替换,分割与合并

大小写转换

判断式

判断式(函数对象)

字符串查找

替换与删除

字符串分割

字符串合并

测试代码:

View Code
#include <iostream>
#include <
string>
#include <vector>
#include <boost/algorithm/
string.hpp>
using 
namespace std;
using 
namespace boost;
void test1(){
    
string str(
"
readme.txt
");
    
if(ends_with(str,
"
txt
")){
        cout<<to_upper_copy(str)+
"
 UPPER
"<<endl;
    }
    replace_first(str,
"
readme
",
"
followme
");
    cout<<str<<endl;
    vector<
char> v(str.begin(),str.end());
    vector<
char> v2=to_upper_copy(erase_first_copy(v,
"
txt
"));
    
for(
int i=
0;i<v2.size();i++)
        cout<<v2[i];
    cout<<endl;
}
void test2(){
    
string str(
"
I Don't Know.\n
");
    cout<<to_upper_copy(str);
    cout<<str;
    to_lower(str);
    cout<<str;
}
void test3(){
    
string str(
"
Power Bomb
");
    cout<<iends_with(str,
"
bomb
")<<endl;
    cout<<ends_with(str,
"
bomb
")<<endl;
    cout<<starts_with(str,
"
Pow
")<<endl;
    cout<<contains(str,
"
er
")<<endl;
}
int main(){
    test2();
}

 

 

第6章

第7章

array类摘要

测试代码:

View Code
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <iterator>
#include <boost/array.hpp>
using 
namespace std;
using 
namespace boost;
int main(){
    
const 
int N=
10;
    array<
int,N> ar;
    
for(
int i=
0;i<N;i++)
        ar[i]=rand()%
100;
    copy(ar.begin(),ar.end(),ostream_iterator<
int>(cout,
"
 
"));
    cout<<endl;
}

 

dynamic_bitset

测试代码:

View Code
#include <iostream>
#include <iterator>
#include <algorithm>
#include <boost/dynamic_bitset.hpp>
using 
namespace std;
using 
namespace boost;
int main(){
    
int n;
    cin>>n;
    dynamic_bitset<> db(n);
    db.
set();
    
for(dynamic_bitset<>::size_type i=db.find_next(
1);
            i!=dynamic_bitset<>::npos;
            i=db.find_next(i)){
        
for(dynamic_bitset<>::size_type j=db.find_next(i);
                j!=dynamic_bitset<>::npos;
                j=db.find_next(j)){
            
if(j%i==
0)
                db[j]=
0;
        }
    }
    
for(dynamic_bitset<>::size_type i=db.find_next(
2);
            i!=dynamic_bitset<>::npos;
            i=db.find_next(i))
        cout<<i<<
"
";
    cout<<endl;
}

 

unordered:boost中的散列容器

boost中unordered散列集合简介:

散列集合unordered_set用法

测试代码:

View Code
#include <iostream>
#include <cstdlib>
#include <ext/hash_set>
#include <boost/assign.hpp>
#include <boost/unordered_set.hpp>
using 
namespace std;
using 
namespace boost;
using 
namespace __gnu_cxx;
template <
class T>
void hash_func(){
    
using 
namespace boost::assign;
    T s=(list_of(
1),
2,
3,
4,
5);
    typename T::iterator p;
    
for(p=s.begin();p!=s.end();++p)
        cout<<*p<<
'
 
';
    cout<<endl;
    cout<<s.size()<<endl;
    s.clear();
    cout<<s.empty()<<endl;
    s.insert(
8);
    s.insert(
45);
    cout<<s.size()<<endl;
    cout<<*s.find(
8)<<endl;
    s.erase(
45);
    
for(p=s.begin();p!=s.end();++p)
        cout<<*p<<
'
 
';
    cout<<endl;
}
int main(){
    hash_func<hash_set<
int> >();
    hash_func<unordered_set<
int> >();
}

 

散列映射简介:unordered_map

undered_map散列映射用法

测试代码:

View Code
#include <iostream>
#include <cstdlib>
#include <ext/hash_map>
#include <boost/assign.hpp>
#include <boost/unordered_map.hpp>
using 
namespace std;
using 
namespace boost;
using 
namespace __gnu_cxx;
int main(){
    
using 
namespace boost::assign;
    unordered_map<
int,
string> um=map_list_of(
1,
"
one
")(
2,
"
two
")(
3,
"
three
");
    um.insert(make_pair(
10,
"
ten
"));
    cout<<um[
10]<<endl;
    um[
11]=
"
eleven
";
    um[
15]=
"
fifteen
";
    unordered_map<
int,
string>::iterator p;
    
for(p=um.begin();p!=um.end();++p)
        cout<<p->first<<
"
-
"<<p->second<<
"
,
";
    cout<<endl;
    um.erase(
11);
    cout<<um.size()<<endl;
    hash_map<
int,
string> hm=map_list_of(
4,
"
four
")(
5,
"
five
")(
6,
"
six
");
    hash_map<
int,
string>::iterator q;
    
for(q=hm.begin();q!=hm.end();++q)
        cout<<q->first<<
"
-
"<<q->second<<
"
,
";
    cout<<endl;
}

 

性能比较:

 

测试代码:

View Code
#include <iostream>
#include <typeinfo>
#include <
set>
#include <ext/hash_set>
#include <boost/unordered_set.hpp>
#include <boost/random.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
//
#include <boost/date_time.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#define BOOST_DATE_TIME_SOURCE
#define BOOSt_DATE_TIME_POSIX_TIME_STD_CONFIG
using 
namespace std;
using 
namespace boost;
//
using namespace boost::gregorian;
using 
namespace boost::posix_time;
using 
namespace __gnu_cxx;
template <
class Clock=microsec_clock>
class basic_ptimer{
    
public:
        basic_ptimer(){
            restart();
        }
        
void restart(){
            _start_time=Clock::local_time();
        }
        
void elapsed()
const{
            cout<<Clock::local_time()-_start_time;
        }
        ~basic_ptimer(){
            elapsed();
        }
    
private:
        ptime _start_time;
};
typedef basic_ptimer<microsec_clock> ptimer;
template <
class T>
void fill_set(T &c){
    variate_generator<mt19937,uniform_int<> >
        gen(mt19937(),uniform_int<>(
0,
100));
    
for(
int i=
0;i<
10000;++i)
        c.insert(gen());
}
template <
class T>
void test_perform(){
    T c;
    cout<<typeid(c).name()<<
'
 
';
    {
        ptimer t;
        fill_set(c);
    }
    cout<<
"
 
";
    {
        ptimer t;
        c.count(
10);
    }
    cout<<
"
 
";
    {
        ptimer t;
        c.find(
20);
    }
    cout<<endl;
}
int main(){
    test_perform<multiset<
int> >();
    test_perform<hash_multiset<
int> >();
    test_perform<unordered_multiset<
int> >();
}

boost中的树形结构:property_tree

读取配置信息

写入配置信息:

conf.xml文件内容及测试代码:

View Code
<
conf
>
    
<
gui
>1
</
gui
>
    
<
theme
>matrix
</
theme
>
    
<
urls
>
        
<
url
>http://www.url1.com
</
url
>
        
<
url
>http://www.url2.com
</
url
>
        
<
url
>http://www.url3.com
</
url
>
    
</
urls
>
    
<
clock_style
>24
</
clock_style
>
</
conf
>
View Code
#include <iostream>
#include <
string>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
using std::cout;
using std::endl;
using std::
string;
void parser(){
    
using 
namespace boost::property_tree;
    ptree pt;
    read_xml(
"
conf.xml
",pt);
    cout<<pt.
get<
string>(
"
conf.theme
")<<endl;
    cout<<pt.
get<
int>(
"
conf.clock_style
")<<endl;
    cout<<pt.
get<
long>(
"
conf.gui
")<<endl;
    cout<<pt.
get(
"
conf.no_prop
",
100)<<endl;
    ptree child;
    ptree::iterator pos;
    child=pt.get_child(
"
conf.urls
");
    
for(pos=child.begin(); pos!=child.end();++pos)
        cout<<pos->second.data()<<
"
 
";
    cout<<endl;
    cout<<
"
==========writing===========
"<<endl;
    pt.put(
"
conf.theme
",
"
Matrix Reloaded
");
    pt.put(
"
conf.clock_style
",
12);
    pt.put(
"
conf.gui
",
0);
    pt.put(
"
conf.urls.url
",
"
http://www.url4.org
");
    pt.put(
"
conf.urls.url
",
"
http://www.url5.org
");
    write_xml(cout,pt);
}
int main(){
    parser();
}

 

 

第8章 算法

foreach使用

测试代码:

View Code
#include <iostream>
#include <vector>
#include <
string>
#include <boost/
foreach.hpp>
#include <boost/assign.hpp>
using 
namespace std;
void  foreach_(){
    
using 
namespace boost::assign;
    vector<
int> v=(list_of(
1),
2,
3,
4,
5);
    BOOST_FOREACH(
int x,v){
        cout<<x<<
"
 
";
    }
    cout<<endl;
    
string str(
"
boost foreach
");
    BOOST_FOREACH(
char& c,str){
        cout<<c<<
"
-
";
    }
    cout<<endl;
}
int main(){
    foreach_();
}

 

第9章

伪随机数random

测试代码:

View Code
#include <iostream>
#include <ctime>
#include <boost/random.hpp>
using 
namespace std;
using 
namespace boost;
void test1(){
    mt19937 rng(time(
0));
    
for(
int i=
0;i<
100;i++){
        cout<<rng()<<
"
 
";
    }
    cout<<endl;
}
int main(){
    test1();
}

 

第12章 多线程

thread库

使用thread库

时间功能

互斥量

互斥量用法

互斥量实例:

线程对象

创建线程,启动线程

join与timed_join

与线程执行体分离

使用bind和function

操作线程

中断线程

启动/禁用线程中断

线程组

条件变量

条件变量用法

转载于:https://www.cnblogs.com/xkfz007/archive/2012/07/09/2582020.html

你可能感兴趣的文章
007-Shell test 命令,[],[[]]
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
pandas 按照某一列进行排序
查看>>
在WPF中如何使用RelativeSource绑定
查看>>
XSLT语法 在.net中使用XSLT转换xml文档示例
查看>>
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
js replace,正则截取字符串内容
查看>>
Thinkphp5笔记三:创建基类
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>
Android中EditText,Button等控件的设置
查看>>
TextKit简单示例
查看>>
网格最短路径算法(Dijkstra & Fast Marching)(转)
查看>>
最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)
查看>>
软链接和硬链接详解
查看>>
HTML5 video 视频标签 常用属性
查看>>
深入理解javascript对象系列第一篇——初识对象
查看>>
Redis_master-slave模式
查看>>
qemu安装
查看>>
多媒体开发之rtmp---rtmp client 端的实现
查看>>