boost foreach库的例子

本文通过几个实例展示了如何使用 Boost 库中的 Foreach 函数来遍历不同类型的容器,包括字符串、数组、向量和数组对象。这些示例覆盖了基本用法及常见应用场景。
  1. #include <boost/foreach.hpp>
  2. #include <string>
  3. #include <iostream>
  4. #include <vector>
  5. #include <list>
  6. #include <deque>
  7. #include <boost/array.hpp>
  8. int main(int argc,char* argv[])
  9. {
  10.   std::string test = "hello";
  11.   BOOST_FOREACH(char it,test)
  12.   {
  13.     std::cout<<it<<std::endl;
  14.   }
  15.   int int_array[] = {1,1,2,3,5,6,6,7,9};
  16.   BOOST_FOREACH(int i, int_array)
  17.   {
  18.     std::cout<<i<<std::endl;
  19.   }
  20.   std::vector<std::string> str_vector;
  21.   str_vector.push_back("hello,C++");
  22.   str_vector.push_back("boost foreach");
  23.   BOOST_FOREACH(std::string iter, str_vector)
  24.   {
  25.     std::cout<<iter<<std::endl;
  26.   }
  27.   boost::array<std::string,3> str_array;
  28.   str_array[0] = "this is way";
  29.   str_array[1] = "please my love";
  30.   BOOST_FOREACH(std::string iter, str_array)
  31.   {
  32.     std::cout<<iter<<std::endl;
  33.   }
  34.   return 0;
  35. }
在C++中,标准C++本身并没有内置的`foreach`循环,但可以通过多种方式实现类似的功能。 ### 自定义宏实现 可以通过自定义宏来实现`foreach`循环,示例代码如下: ```cpp #include <iostream> #include <vector> #define foreach(container,it) \ for(typeof((container).begin()) it = (container).begin();it!=(container).end();++it) int main() { std::vector<int> intVector = {1, 2, 3, 4, 5}; foreach(intVector, it) { std::cout << *it << std::endl; } return 0; } ``` 这里定义了`foreach`宏用于遍历容器,通过`typeof`获取容器迭代器类型,然后进行遍历操作[^1]。 ### 使用Boost的`BOOST_FOREACH` Boost提供了`BOOST_FOREACH`宏来实现类似`foreach`的功能,示例如下: ```cpp #include <iostream> #include <vector> #include <boost/foreach.hpp> void add(int& num) { std::cout << num << std::endl; } int main() { std::vector<int> intVector = {1, 2, 3, 4, 5}; BOOST_FOREACH(int& a, intVector) { add(a); } return 0; } ``` 在这个例子中,`BOOST_FOREACH`用于遍历`intVector`容器,并对每个元素执行`add`函数[^2]。 ### Qt中的`foreach` 在Qt框架中,有自己的`foreach`语法糖,示例如下: ```cpp #include <QCoreApplication> #include <QList> #include <QString> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QList<QString> listTemp; listTemp << "aaa" << "bbb" << "ccc"; QString strTemp2; foreach(QString strTemp1, listTemp) { strTemp2 = strTemp1; qDebug() << strTemp2; } return a.exec(); } ``` `foreach`用于遍历`listTemp`列表,将列表中的每个元素依次赋值给`strTemp1`,并进行相应操作[^3]。 ### 自定义类实现`foreach` 可以通过自定义类和宏来实现`foreach`功能,示例代码如下: ```cpp // foreach.hpp #ifndef FOREACH_HPP #define FOREACH_HPP template <typename container_type> class Foreach_container { public: Foreach_container(const container_type &c) : begin(c.begin()), end(c.end()) {} Foreach_container(container_type &c) : begin(c.begin()), end(c.end()) {} decltype(container_type().begin()) begin, end; bool f = true; }; #define FOREACH(var, container) \ for (auto _container_ = Foreach_container<decltype(container)>(container); \ _container_.f && _container_.begin != _container_.end; \ ++_container_.begin, _container_.f = true) \ for (var = *_container_.begin; _container_.f; _container_.f = false) #ifndef foreach #define foreach FOREACH #endif #endif // FOREACH_HPP ``` ```cpp // main.cpp #include <iostream> #include <vector> #include "foreach.hpp" int main(void) { std::vector<int> vec{1, 2, 3, 4, 5}; foreach (int var, vec) { std::cout << var << std::endl; } return 0; } ``` 这里通过自定义`Foreach_container`类和`FOREACH`宏实现了`foreach`功能,在`main`函数中可以使用该宏来遍历`std::vector`容器[^4]。 ### C++11及以后的范围for循环 C++11引入了范围for循环,这是一种更简洁的`foreach`实现方式,示例如下: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> intVector = {1, 2, 3, 4, 5}; for (int num : intVector) { std::cout << num << std::endl; } return 0; } ``` 范围for循环可以直接遍历容器中的每个元素,代码更加简洁易读。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值