BOOST_FOREACH的使用

对于STL的遍历操作,可以使用std:for_each,但是使用std:for_each的话,操作起来不是很灵活。

1 // for_each.  Apply a function to every element of a range.
2 template <class _InputIter, class _Function>
3 _Function for_each(_InputIter __first, _InputIter __last, _Function __f) {
4   __STL_REQUIRES(_InputIter, _InputIterator);
5   for ( ; __first != __last; ++__first)
6     __f(*__first);
7   return __f;
8 }

每次使用的时候都需要定义一个函数,有的时候只是想简单的处理一个小的功能,不想定义过多的函数。这样的话就可以考虑采用BOOST_FOREACH了。BOOST_FOREACH的定义在boost/foreach.hpp中。

简单的使用例子如下:

1 string hello("hello, boost!");
2 BOOST_FOREACH(char ch, hello)
3 {
4     cout<< ch;
5 }
6
7 cout<<endl;

或者如下:

 1 map<long long,  CSession::Session_Ptr> CSessionManage::session_list_
 2 pair<long long, CSession::Session_Ptr> session_pair;
 3 unsigned int session_num = 0;
 4
 5 BOOST_FOREACH(session_pair, session_list_)
 6 {
 7     if (session_type == session_pair.second->get_type())
 8     {
 9         session_num++;
10     }
11 }
12
13 return session_num;
时间: 2024-11-09 00:42:49

BOOST_FOREACH的使用的相关文章

用BOOST_FOREACH简化遍历操作

BOOST_FOREACH能够方便的遍历STL容器. 仅仅须要头文件: #include <boost/foreach.hpp> 然后遍历容器vector/list/set/deque/stack/queue都是类似的: vector<int32_t> _v; BOOST_FOREACH(int32_t value,_v) { //这里就能够訪问value } 同一时候元素还支持引用,const,比方上面代码还能够写成: vector<int32_t> _v; BOOS

BOOST_FOREACH 介绍

example 1:string str("Hello, world!");BOOST_FOREACH(char c, str){    cout << c;}它相当于:string str("Hello, world!");for(int i = 0; i < str.length(); ++i){    char c = str[i];    cout << c;} example 2:int arr[] = {1, 3, 5, 2

BOOST_FOREACH 的奇葩发现

函数形式:BOOST_FOREACH(type name, container);用于遍历容器里面的内容,但是如果遇到map等里面自带逗号的数据结构时,就会有问题.比如 std::vector<std::map<std::string, std::string>> container; 如果你直接这样遍历,编译器是无法通过的(可能是2008的BUG) BOOST_FOREACH(std::map<std::string, std::string>& tmp, c

clang format 官方文档自定义参数介绍(中英文)

英文 Configuring Style in Code When using clang::format::reformat(...) functions, the format is specified by supplying the clang::format::FormatStyle structure. Configurable Format Style Options This section lists the supported style options. Value typ

Understand the Qt containers(有对应表)

Container classes are one of the cornerstones of object-oriented programming, invaluable tools that free us from having to permanently think about memory management. Qt comes with its own set of container classes, closely modeled after those in the S

动手打造自己的跨语言异构模块通信解决方案

目前主流的跨语言异构模块通信方案有很多种,比如: 1.跨语言的RPC调用(Apache Thrift):它是Facebook贡献给Apache基金会的开源项目,旨在构建跨语言平台的通信方案.目前它支持非常多种语言,其中当然包括C/C++和Java.Thrift内置一个语言编译器,可以根据Thrift的语法规范,编译生成指定语言的RPC调用模块,功能也是非常的强大.Thrift的语法规范里面定义了数据类型.数据模块结构,有点类似WebService里面的WSDL文件.通过Thrift,我们就可以实

GPIO

最新版的uhd/host中提供了对GPIO操作的接口,在multi_usrp.cpp中如下定义: void set_gpio_attr(const std::string &bank, const std::string &attr, const boost::uint32_t value, const boost::uint32_t mask, const size_t mboard) { if (_tree->exists(mb_root(mboard) / "gpio

Boost property_tree解析json

使用Boost property_tree解析json 之前使用jsoncpp解析json,现在才知道boost就有解析的库,学习一下吧 property_tree可以解析xml,json,ini,info等格式的数据,用property_tree解析这几种格式使用方法很相似. 解析json很简单,命名空间为boost::property_tree,reson_json函数将文件流.字符串解析到ptree,write_json将ptree输出为字符串或文件流.其余的都是对ptree的操作. 解析

C和C++代码精粹读书笔记

最近看了<<C和C++代码精粹>>, 设计到C++的指针,异常处理等方方面面,其中有些自认为非常不错的代码,在工作中非常值得借鉴. 1.指向成员函数的指针 A #include<iostream> using namespace std; class C { public: void f(){ cout<<"C::f\n";} void g(){cout<<"C::g\n";} }; int main()