Boost基础入门
Boost简介
boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。不过对比STL,boost更加实用。STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作。boost主要包含一下几个大类:字符串及文本处理、容器、迭代子(Iterator)、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。
有一些库是跨类别包含的,就是既属于这个类别又属于那个类别。它是一套开放源代码、高度可移植的C++库。
Boost在线安装(yum仓库先必须搭建好)
[root@foundation45 yum.repos.d]# yum install boost-devel
Boost的基本使用
- lambda表达式
lambda库通过创建一个匿名的lambda表达式来代替实名的函数对象
- 案例:helloqpy.cpp
#include<iostream> #include<boost/lambda/lambda.hpp> using namespace boost::lambda; using namespace std; int main() { //endl用'\n'来代替。 //此时的_1代表了hello。 (cout<<_1<<""<<_2<<'\n')("hello","qpy"); return 0; }
#include <iostream> #include <boost/lambda/lambda.hpp> #include <boost/function.hpp> using namespace boost::lambda; using namespace boost; using namespace std; int main() { function<void(char const*,char const*)> func = cout << _1 << " " << _2; func("Hello","World"); }
- 案例:for_each.cpp
#include<iostream> #include<boost/lambda/lambda.hpp> #include<vector> #include<algorithm> #include<iterator> using namespace boost::lambda; using namespace std; int main() { vector<string> vec; vec.push_back("1"); vec.push_back("2"); vec.push_back("3"); vec.push_back("4"); //不用自己写print函数,也不用写print的类模版函数,类型可以自动匹配输出。 for_each(vec.begin(),vec.end(),cout<<_1<<" "); return 0; }
容器中存放任意类型值
#include <iostream> #include <string> #include <vector> #include <iterator> #include <boost/any.hpp> int main() { using namespace std; using namespace boost; vector<any> vec; vec.push_back(10); vec.push_back(12.4); vec.push_back(string("string")); char const* c_str = "const char*"; vec.push_back(c_str); cout << any_cast<int>(vec[0]) << endl << any_cast<double>(vec[1]) << endl << any_cast<string&>(vec[2]) << endl << any_cast<char const*>(vec[3]) << endl; // copy(vec.begin(),vec.end(),ostream_iterator<any>(cout,",")); }
指针容器
容器可以存放各种类型的数据,但是存放指针的时候有很大弊端,容器销毁的时候会释放容器内存,意思就是会销毁指针,但是指针所指向的内存空间需要程序员来手动释放,如果忘记释放,就会造成内存的泄露,所以Boost里面有指针容器,容器销毁的时候会自动释放指针指向的内存空间。
类型 | 作用 |
---|---|
ptr_vector | 指针向量 |
ptr_set | 指针集合 |
ptr_array | 指针数组 |
ptr_multimap | 指针一对多映射 |
* 案例
```
#include<iostream>
#include<boost/lambda/lambda.hpp>
#include<vector>
#include<algorithm>
#include<iterator>
#include<boost/ptr_container/ptr_vector.hpp>
using namespace boost::lambda;
using namespace std;
int main()
{
boost::ptr_vector<int> vec;
for(int i=0;i<10;i++)
{
vec.push_back(new int(i));
}
for_each(vec.begin(),vec.end(),cout<<_1<<" ");
return 0;
}
```
输出结果
[root@foundation45 makefile]# ./a.out 0 1 2 3 4 5 6 7 8 9