boost之foreach

来源:互联网 发布:openstack nova源码 编辑:程序博客网 时间:2024/05/24 00:14
  • 头文件 #include “boost/foreach.hpp”
  • foreach可以用在array, string还有其他stl的容器如vector,list,deque上,形式为 BOOST_FOREACH( 元素, 可迭代对象),还有BOOST_REVERSE_FOREACH(元素类型, 可迭代对象)可以用于反向迭代。
  • foreach还可以作用于能够返回可迭代对象的函数上。
  • 元素字段可以返回引用和非引用,返回引用的话可以修改原来的可迭代对象;返回非引用的化类似于值传递。
  • foreach还可以用在二维数组中。

  • 示例代码如下:

#include <iostream>#include <string>#include <vector>#include <list>#include <deque>#include <boost/foreach.hpp>using namespace std;//此函数返回一个可迭代对象,用于foreach中。vector<int> * get_filled_vec( void ) {    vector<int> * vecp = new vector<int>();    vecp->push_back(1);    vecp->push_back(2);    vecp->push_back(3);    vecp->push_back(4);    vecp->push_back(5);    return vecp;}int main(int argc, char ** argv) {    //1.Use foreach in array.    int arr[] = {1,2,3,4,5,6,7,8,9};    BOOST_FOREACH(int i, arr) { cout << "  " << i;}    cout << endl;    BOOST_REVERSE_FOREACH(int i, arr) { cout << "  " << i;}    cout << endl;    BOOST_FOREACH(int & i, arr) { i += 100; } //return reference.    BOOST_FOREACH(int i, arr) { cout << "  " << i;}    cout << endl;    //2.Use foreach in string.    string str = "Hello world!";    BOOST_REVERSE_FOREACH(char ch, str) { cout << "  " << ch << endl; }    cout << endl;    //3.Use foreach in stl container.    //3.1 vector    vector<int> vec(&arr[0], &arr[8]);    BOOST_FOREACH(int i, vec) { cout << "  " << i; }    cout << endl;    //3.2 list    list<int> lst(arr, arr+8);    BOOST_FOREACH(int & i, lst) { cout << "  " << i; }    cout << endl;    //3.3 deque    deque<int> deq(arr, arr+8);    BOOST_FOREACH(int i, deq) { cout << "  " << i; }    cout << endl;    //4.Use foreach in function.    BOOST_FOREACH(int i, *get_filled_vec()) { cout << "  " << i; }    cout << endl;    //5. for 2 dimosion vector {} is not necessary.    vector<vector<int> > dim2;    vector<int> vec1(arr, arr+8);    vector<int> vec2(arr, arr+8);    dim2.push_back(vec1);    dim2.push_back(vec2);    cout << "====" << endl;    BOOST_FOREACH(vector<int> & vec, dim2) {        BOOST_FOREACH(int item, vec)            cout << "  " << item;        cout << endl;    }    cout << endl;    return 0;}
  • 编译方法:
INC = -I/root/software/boostLib/boost_1_64_0all:    g++ ${INC} foreachDemo.cppclean:    rm -f ./a.out
原创粉丝点击