在线安装
Redhat/Centos :
sudo yum install boost-devel
Ubuntu :
sudo apt-get install libboost-dev
手动安装
大部分boost库的头文件主要由模板和内联函数实现,不需要编译成二进制文件。只需要解压即可。
tar -jxvf boost-版本号.tar.bz2
打印数字和字符
#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
可以把任意类型的数据放在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
字符串转整型或浮点型
#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
特点:容器销毁自动释放指针
类型 | 说明 |
---|---|
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));}
}
变量离开(正常/异常)作用域,再触发处理代码
#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()等
与析构函数相似的作用
#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;
}
全局函数:
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
用boost库可以让类不可复制
#include <boost/nocopyable.hpp>class Test:private boost::nocopyable{// ...
};
在C++中 ,哪些方法可以禁止复制和重载?
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小时内删除。
留言与评论(共有 0 条评论) |