C++ foreach 实现

   日期:2020-09-26     浏览:100    评论:0    
核心提示:C++ foreach注意: 本人是原创, 如若发现雷同, 后果自负C++ 11C++ 11 是直接支持的, 判断__cpp_range_based_for的值, 如果是200907L就是支持#include <iostream>#include <vector>int main(void){ std::vector<int> vec{1,2,3,4,5}; #if __cpp_range_based_for >= 200907L for (

C++ foreach

注意: 本人是原创, 如若发现雷同, 后果自负

C++ 11

C++ 11 是直接支持的, 判断__cpp_range_based_for的值, 如果是200907L就是支持

#include <iostream>
#include <vector>

int main(void)
{ 
	std::vector<int> vec{ 1,2,3,4,5};
	
#if __cpp_range_based_for >= 200907L
	for (int var : vec)
	{ 
		std::cout << var << std::endl;
	}
#endif
}

输出结果

1
2
3
4
5

C++ 11 之前

只能写一个类来控制
文件名: foreach.hpp

// 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_ = in::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

使用方法

#include <iostream>
#include <vector>
#include "foreach.hpp"

int main(void)
{ 
	std::vector<int> vec{ 1,2,3,4,5};
	
	// 使用foreach宏
	foreach (int var, vec)
	{ 
		std::cout << var << std::endl;
	}
}

输出结果

1
2
3
4
5

结合

#include <iostream>
#include <vector>

#if __cpp_range_based_for >= 200907L

	#define FOREACH(var, container) for (var : container)
	
#else
	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_ = in::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)
#endif

#ifndef foreach
# define foreach FOREACH
#endif

int main(void)
{ 
	std::vector<int> vec{ 1,2,3,4,5};
	
	// 使用foreach宏
	foreach (int var, vec)
	{ 
		std::cout << var << std::endl;
	}
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服