快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

澳门威尼人斯人官网7:最简单的foreach实现(VC amp GCC)



foreach听说已经进了新的C++标准,不过在没有编译器支持曩昔,自己写一个也很轻易。

(1)   foreach 标准用法:

std::vector vec;

foreach(int i,  vec) {

std::cout

(2)VC实现

在最新的VC版本华夏本已经有了类似于foreach的支持,改个名字就行了:

#define foreach(var, container) 澳门威尼人斯人官网7  for each(var in containter)

(3)GCC实现

GCC没有内嵌支持,不过因为GCC支持typeof关键字, 以是实现起来也不是太难.  (有个bug, 在OwnWaterloo提醒下已经矫正澳门威尼人斯人官网7)

template  struct foreach_helper {

typename C::const_iterator it, end;

foreac澳门威尼人斯人官网7h_helper (const C& c) : it(c.begin()), end(c.end()) {}

};

#define RANDOM_VAR(name, line)     RANDOM_VAR_(name, line)

#define RANDOM_VAR_(name, line)    name ## line

#define foreach(var, container)

__typeof__(container) const&   RANDOM_VAR(_con_, __LINE__) = container;

for (foreach_helper  _fh_(RANDOM_VAR(_con_, __LINE__)); _fh_.it != _fh_.end; ++_fh_.it)

for (var = *_fh_.it;; __extension__ ({break;}))

这里有一个特殊的斟酌,便是container有可能是一个临时工具,或者是某个函数的返回值。为了纰谬容器进行复制,使用了一个不太为人所知的C++特点,便是临时变量在存澳门威尼人斯人官网7在引用时,生命期会由引用变量抉择。这样包管在进行轮回时始终有效。

(4)机能

我分手应用GCC和VC9进行了测试(优化选项都应用O2),结果注解应用澳门威尼人斯人官网7foreach和通俗的iterator 遍历险些没有区别。不过gcc的遍历机能要显着好于VC9 (用个具有中国特色的结论,便是大年夜约要好五倍),我的测试当然很粗略,不值得信托。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: