?
快捷搜索:  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 (用個具有中國特色的結論,便是大年夜約要好五倍),我的測試當然很粗略,不值得信托。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户