- 头文件 #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_0
all:
g++ ${INC} foreachDemo.cpp
clean:
rm -f ./a.out