C++中简单实现foreach循环

简介:

看别人用Qt写的程序时,偶然发现虽然程序中用到了foreach。foreach本来不是C++的关键字,但Qt是如何实现的呢?查看Qt的文档,里面说是用preprocesser(预处理)实现的。研究了一下,原来是宏定义。

  foreach宏的实质就是在宏中定义循环申明部分,而不包括循环体。在使用的时候,紧接着写循环体就行了。下面用std::vector<std::string>写了一个简单的示例。

 
  1. #include <iostream>  
  2. #include <string>  
  3. #include <vector>  
  4.  
  5. using namespace std;  
  6.  
  7. #define foreach(var, list, type)   
  8.     for (type::iterator var = list.begin(); var != list.end(); var++)  
  9.  
  10. int main(int argc, char* argv[]) {  
  11.     vector<string> ss;  
  12.     ss.push_back("first");  
  13.     ss.push_back("second");  
  14.     ss.push_back("third");  
  15.     ss.push_back("fourth");  
  16.     ss.push_back("fifth");  
  17.  
  18.     foreach (item, ss, vector<string>) {  
  19.         cout << *item << endl;  
  20.     }  
  21.  
  22.     return 0;  

不过从这个示例看来,这样定义的foreach并不能通用,如果遇到set还好,遇到map就傻了。也不能支持自定义的集合类型。要写一个通用性好一点的foreach,可能还需要写一两个类来辅助才行。问题先放在这里,空了再仔细研究研究。



本文转自边城__ 51CTO博客,原文链接:http://blog.51cto.com/jamesfancy/843170,如需转载请自行联系原作者

相关文章
|
2月前
|
设计模式 测试技术 编译器
C++项目中打破循环依赖的锁链:实用方法大全(一)
C++项目中打破循环依赖的锁链:实用方法大全
94 0
|
3月前
|
机器学习/深度学习 C++
C/C++基础知识——数组、循环
C/C++基础知识——数组、循环
46 0
C/C++基础知识——数组、循环
|
2月前
|
缓存 编译器 数据处理
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
60 0
|
12天前
|
安全 编译器 程序员
【C++入门】内联函数、auto与基于范围的for循环
【C++入门】内联函数、auto与基于范围的for循环
|
12天前
|
C++ Python
C++教学——从入门到精通 10.循环
学习编程建议先Python后C++,以避免C++思维影响。课程涵盖for、while和do while循环。for循环示例:`for(int i=0;i&lt;n;i++)`,用于计算114514天后的金币总数(1145140个)。死循环通过`for(int i=0;;i++)`实现,用`break`退出。while循环格式`while(条件)`,同样可解决金币问题。do while循环特点是先执行后判断,结构为`do{...}while(条件)`。
21 2
|
1月前
|
C++
C++ While 和 For 循环:流程控制全解析
本文介绍了C++中的`switch`语句和循环结构。`switch`语句根据表达式的值执行匹配的代码块,可以使用`break`终止执行并跳出`switch`。`default`关键字用于处理没有匹配`case`的情况。接着,文章讲述了三种类型的循环:`while`循环在条件满足时执行代码,`do/while`至少执行一次代码再检查条件,`for`循环适用于已知循环次数的情况。`for`循环包含初始化、条件和递增三个部分。此外,还提到了嵌套循环和C++11引入的`foreach`循环,用于遍历数组元素。最后,鼓励读者关注微信公众号`Let us Coding`获取更多内容。
21 0
|
2月前
|
设计模式 敏捷开发 持续交付
C++项目中打破循环依赖的锁链:实用方法大全(三)
C++项目中打破循环依赖的锁链:实用方法大全
61 0
|
2月前
|
测试技术 持续交付 API
C++项目中打破循环依赖的锁链:实用方法大全(二)
C++项目中打破循环依赖的锁链:实用方法大全
70 0
|
2月前
|
并行计算 编译器 程序员
提升C/C++编程效率:深入C/C++ for循环的优化与应用
提升C/C++编程效率:深入C/C++ for循环的优化与应用
79 0
|
2月前
|
C++
C++系列八:选择、循环与转向
C++系列八:选择、循环与转向