Boost基础入门

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 

猜你喜欢

转载自blog.csdn.net/qq_40477151/article/details/79870995