Boost的安装与使用

阅读: 评论:0

Boost的安装与使用

Boost的安装与使用

文章目录

  • boost的安装
  • boost的使用
    • 1. lamdba表达式
    • 2. 容器中存放任意类型值
    • 3. 数据类型转换
    • 4. 指针容器
    • 5. 退出处理
    • 6. 遍历
    • 7. 函数绑定
    • 8. 不可复制类

boost的安装

在线安装
Redhat/Centos :

  sudo yum install boost-devel

Ubuntu :

  sudo apt-get install libboost-dev

手动安装
大部分boost库的头文件主要由模板和内联函数实现,不需要编译成二进制文件。只需要解压即可。

  1. 下载boost : Boost C++ Libraries
  2. 解压 : tar -jxvf boost-版本号.tar.bz2

boost的使用

1. lamdba表达式

打印数字和字符

#include <iostream>
#include <boost/lambda/lambda.hpp>
using namespace std;       // 标准库
using namespace boost::lambda;     // boost lambda库int main(){// (cout << _1 << " " << _2)(3,4);auto func = (cout << _1 << " " << _2);func(1,"abcd");
}

结果为:

1 abcd

2. 容器中存放任意类型值

可以把任意类型的数据放在any中,用的时候再any_cast出类型

#include <iostream>
#include <boost/any.hpp>
using namespace std;       // 标准库
using namespace boost;     // boost库int main(){any n = 10;any f = 1.23f;any s = string("abcd");cout << any_cast<int>(n) << endl;cout << any_cast<float>(f) << endl;cout << any_cast<string&>(s) << endl;
}

结果为:

10
1.23
abcd

3. 数据类型转换

字符串转整型或浮点型

#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace std;       // 标准库
using namespace boost;     // boost库int main(){cout << lexical_cast<int>("1000") << endl;cout << lexical_cast<float>("1.23000") << endl;cout << stoi("1000") << endl;     // C++11标准库cout << stof("1.23") << endl;
}

结果为:

1000
1.23
1000
1.23

==字符串转换为类的类型 ==

#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace std;    
using namespace boost;    class People{string name;long telephone;string address;
public:friend ostream& operator << (ostream& os,const People& p){return os << p.name << "t" << p.telephone << "t" << p.address;}friend istream& operator >> (istream& is,People& p){return is >> p.name >> p.telephone >> p.address;}
};int main(){People p;   // = lexical_cast<People>("zhangsan 12345 abcde");istringstream iss("zhangsan 12345 abcde");iss >> p;cout << p << endl;
}

结果为:

zhangsan	12345	abcde

4. 指针容器

特点:容器销毁自动释放指针

类型说明
ptr_vector指针向量
ptr_set指针集合
ptr_array指针数组
ptr_multimap指针一对多映射
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/ptr_container/ptr_set.hpp>int main(){ptr_vector<int> pvec;for(int i=0;i<10;++i){pvec.push_back(new int(i));}for(auto n:pvec){cout << n << " ";}boost::ptr_set<int> s;for(size_t i=0;i<10;i++){s.insert(new int(i));}
}

5. 退出处理

变量离开(正常/异常)作用域,再触发处理代码

#include <iostream>
#include <boost/scope_exit.hpp>
using namespace std;  
using namespace boost; class Test{
public:Test(){cout << __func__ << endl;}~Test(){cout << __func__ << endl;}
};int main(){Test t;Test* pt = new Test;BOOST_SCOPE_EXIT(pt){delete pt;           // 离开作用域实行}BOOST_SCOPE_EXIT_ENDcout << "abcd" << endl;
}

结果为:

Test
Test
abcd
~Test
~Test

不止用在new/delete,也用在fopen()/fclose(),dlopen()/dlclose()等
与析构函数相似的作用

6. 遍历

#include <iostream>
#include <boost/foreach.hpp>
using namespace std;
int main(){int arr[] = {1,2,3,4,5};BOOST_FOREACH(int a,arr) cout << a << endl;
}

7. 函数绑定

全局函数:

 boost::bind(函数名, 参数1,参数2,...)

把参数中的一个函数参数固定,其他的再赋值

#include <iostream>
#include <boost/bind.hpp>
using namespace std;     
using namespace boost;    int add(int a,int b,int c){return a+b+c;
}int main(){auto add2 = bind(add,_1,_2,0);cout << add2(10,12) << endl;
}

结果为:

22

成员函数:

 boost::bind(&类名::方法名,类实例指针,参数1,参数2)
#include <iostream>
#include <boost/bind.hpp>
using namespace std;  
using namespace boost;     class Test{
public:Test(){cout << __func__ << endl;}~Test(){cout << __func__ << endl;}void Func(int n)const{cout << n << endl;}
};int main(){Test t;t.Func(1000);auto funct = bind(&Test::Func,&t,_1);funct(2000);
}

结果为:

Test
1000
2000
~Test

8. 不可复制类

用boost库可以让类不可复制

#include <boost/nocopyable.hpp>class Test:private boost::nocopyable{// ...  
};

在C++中 ,哪些方法可以禁止复制和重载?

  1. 设为私有
  2. 加=delete
class Test{
public:Test(){cout << __func__ << endl;}~Test(){cout << __func__ << endl;}void Func(int n)const{cout << n << endl;}// C++11// Test(const Test&) = delete,// Test& operator = (const Test&) = delete;
private:Test(const Test&);Test& operator = (const Test&);
};

本文发布于:2024-01-29 13:26:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170650597115592.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Boost
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23