最简单的foreach实现(VC

文章作者 100test 发表时间 2009:06:15 10:08:28
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  计算机等级考试四级应用题解析汇总

  2009年下半年全国计算机二级考试报名时间从6月1日起已经开始报名。详情点击:2009年下半年全国计算机等级考试各地报名点汇总。2009年下半年全国计算机二级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库

  foreach据说已经进了新的C 标准,不过在没有编译器支持以前,自己写一个也很容易。
  (1)foreach 标准用法:
  std::vector<.int>. vec.
  foreach(int i,  vec) {
  std::cout <.<.  i.
  }
  (2)VC实现
  在最新的VC版本中原来已经有了类似于foreach的支持,改个名字就行了:
  #define foreach(var, container)   for each(var in containter)
  (3)GCC实现
  GCC没有内嵌支持,不过由于GCC支持typeof关键字, 所以实现起来也不是太难.  (有个bug, 在OwnWaterloo提醒下已经纠正)
  template <.typename C>. struct foreach_helper {
  typename C::const_iterator it, end.
  foreach_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 <.__typeof__(container)>. _fh_(RANDOM_VAR(_con_, __LINE__)). _fh_.it != _fh_.end.  _fh_.it) for (var = *_fh_.it.. __extension__ ({break.}))
  这里有一个特殊的考虑,就是container有可能是一个临时对象,或者是某个函数的返回值。为了不对容器进行复制,利用了一个不太为人所知的C 特性,就是临时变量在存在引用时,生命期会由引用变量决定。这样保证在进行循环时始终有效。
  (4)性能
  我分别使用GCC和VC9进行了测试(优化选项都使用O2),结果表明使用foreach和普通的iterator 遍历几乎没有差别。不过gcc的遍历性能要明显好于VC9 (用个具有中国特色的结论,就是大约要好五倍),我的测试当然很粗略,不值得相信。

  2009年9月全国计算机等级考试时间及科目预告

  2009年NCRE考试有新变化

  2009年全国计算机等级考试-大纲

  全国计算机等级考试历年真题及答案

  2009年上半年全国计算机等级考试试题及答案



相关文章


脚本系统:c 内嵌python计算机二级考试
log4cxxC 的日志库使用随记计算机二级考试
最简单的foreach实现(VC
窗口刷新问题(WM_PAINT、BeginPaint、EndPaint的说明)计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛