杞澆:鍦–++涓疄鐜癴oreach寰幆
浣跨敤榪嘋#銆丳HP榪欎簺鏇撮珮綰ц璦鐨勬湅鍙嬩竴瀹氱煡閬揻oreach寰幆銆俧oreach璇彞緇欑紪紼嬪甫鏉ヤ簡寰堝ぇ鐨勬柟渚匡紝鍑忓皯浜嗕唬鐮侊紝騫跺鍔犱簡紼嬪簭鐨勫彲璇繪с侰++铏界劧涓嶆敮鎸乫oreach鍏抽敭瀛楋紝浣咰++鏄竴闂ㄥ己澶х殑璇█錛屽彧瑕佺◢寰敤涓鐐瑰皬鎶宸э紝涔熷彲浠ュ湪C++涓嬌鐢╢oreach寰幆銆?br />
鍦–#涓紝foreach璇彞鐨勬晥鏋滆浜哄悆鎯娿俧oreach璇彞鐪佸幓浜嗗鏉傝屽張綾諱技鐨勫驚鐜帶鍒惰鍙ワ紝浣夸唬鐮侀潪甯哥畝媧佹槑浜嗐備笅闈㈢殑渚嬪瓙鍙互娓呮鍦扮湅鍒拌繖涓鐐廣?br />
鍋囨湁涓涓被鍨嬩負ContainerType綾誨瀷鐨勫鍣–ontainer錛屽畠鐨勬瘡涓厓绱犵殑綾誨瀷涓篍lementType銆?br />
鍦–#涓紝鏁扮粍灝辨槸榪欐牱涓縐嶅鍣ㄣ?br />
鍦–++涓紝stl鐨剉ector銆乵ap絳変篃鏄繖鏍風殑瀹瑰櫒銆?br />
濡傛灉瑕侀亶鍘嗗鍣–ontainer鐨勬瘡涓厓绱狅紝鍦–#涓彲浠ヤ嬌鐢ㄥ涓嬩唬鐮侊細
foreach( ElementType element in Container)
{ // 浣跨敤element璁塊棶璇ュ厓绱?/span>
}
鑰屽湪C++涓紝閫氬父鐨勪唬鐮侀兘浼氭槸榪欐牱錛?br />
Container::iterator iter;
for (iter = Container.begin(); iter!=Container.end(); iter++)
{ // 浣跨敤(*iter)璁塊棶璇ュ厓绱?/span>
}
鏄劇劧C#涓殑浠g爜鏇存竻鏅扮殑澶氥傝孋++鐨勪唬鐮佷腑鍖呭惈浜嗗彉閲忓0鏄庡拰寰幆鎺у埗錛屾樉寰楁洿澶嶆潅浜嗐備篃璁告偍瀵硅繖涓鐐瑰鍔犵殑澶嶆潅鎬у茍涓嶅湪鎰忥紝浣嗘湰鐫鍕垮洜鍠勫皬鑰屼笉涓虹殑鍘熷垯錛屼互鍙婁竴鐐規濊冪簿紲烇紝鎴戝喅瀹氳C++涔熸嫢鏈変嬌鐢╢oreach寰幆鐨勮兘鍔涖?br />
C++鐨勫畯寰堥傚悎鍋氳繖縐嶄簨鎯呫傞棶棰樺湪浜庡浣曞仛鐨勬洿鍍廋#涓殑閭g鏍峰紡銆傚鏋滃湪璁塊棶鍏冪礌鐨勪唬鐮佸潡鐨勫墠闈㈠拰鍚庨潰鍚勫姞涓涓畯錛岄偅涔堣繖浠朵簨鎯呭氨鍙樺緱姣棤鎰忎箟錛屽茍寰堝彲絎戙?br />
鎴戜滑鍙兘浣跨敤涓涓畯錛屽茍鍛藉悕涓篺oreach銆傚湪榪欎釜瀹忓悗闈㈢殑浠g爜鍧楀皢鍙互鍍忓湪C#涓偅鏍峰彲浠ヤ嬌鐢ㄤ竴涓彉閲忓悕鏉ラ亶鍘嗗鍣ㄤ腑鐨勬墍鏈夊厓绱犮傚畯涓0鏄庣殑鍙橀噺涓嶈兘姹℃煋鍒扮▼搴忎腑鍏跺畠閮ㄥ垎鐨勫懡鍚嶉棿錛岃岃繖浜涘彉閲忓張涓嶅湪璁塊棶鍏冪礌鐨勪唬鐮佸潡涓0鏄庛傝繖鏍風殑瑕佹眰浣胯繖涓棶棰樺彉鎴愪竴縐嶈冮獙浠g爜鎶宸х殑鏈夎叮闂銆?br />
C++璇█鎺у埗鑳藉姏鐨勫己澶т嬌瀹冪‘瀹炲彲浠ユ敮鎸乫oreach璇彞銆傝繖瑕佺敤鍒頒袱涓妧宸э細1錛宖or寰幆鐨勭涓鏉¤鍙ュ彲浠ュ0鏄庡眬閮ㄥ彉閲忥紱2錛屽厖鍒嗗埄鐢╢or寰幆鐨勮繃紼嬫帶鍒惰兘鍔涖?br />
C++涓殑foreach璇彞瀹氫箟瀹忓涓嬶細
#define foreach(elementType, element, containerType, container) "
for (containerType::iterator iter = container.begin(); iter != container.end(); iter++)"
for (bool go = true; go;)"
for (elementType & element = *iter;go; go=false)
瀹忎腑瀹氫箟浜嗕笁閲峟or寰幆銆傜涓閲嶇殑鎰忎箟寰堟竻妤氾細浣跨敤瀹瑰櫒鐨勯亶鍘嗚呴亶鍘嗗鍣ㄤ腑鐨勫厓绱犮傜浜屻佺涓夐噸for寰幆鍏跺疄鍙兘鎵ц涓嬈★紝鍏朵富瑕佺洰鐨勬槸澹版槑element鍙橀噺銆侰++鐨勫彉閲忓紩鐢ㄧ被鍨嬩嬌鍚庨潰鐨勫厓绱犺闂唬鐮佸潡鍙互鐩存帴浣跨敤element鍙橀噺銆?br />
foreach瀹忕殑鍙傛暟渚濇涓猴細鍏冪礌綾誨瀷錛屽厓绱犲悕錛屽鍣ㄧ被鍨嬶紝瀹瑰櫒鍚嶃?br />
鍋囪鏈変釜vector濡備笅闈㈢殑瀹氫箟錛?br />
vector<int> v;
閭d箞閬嶅巻v鍙互浣跨敤涓嬮潰鐨勪唬鐮侊細
foreach(int, e, vector<int>, v)
{//浣跨敤(e)鏉ヨ闂畍鐨勫厓绱?/span>
}
鏄笉鏄緢鍍廋#涓殑foreach璇彞鍛紵鎴戝啓浜嗕竴灝忔紼嬪簭錛岀湅鐪嬭繖涓畯鏄笉鏄湡鐨勮兘宸ヤ綔錛屼唬鐮佸涓嬶細
#include <iostream>
#include <vector>
using namespace std;
// 鍦–++涓嬌鐢?nbsp;foreach 寰幆
#define foreach(elementType, element, containerType, container) "
for (containerType::iterator iter = container.begin(); iter != container.end(); iter++)"
for (bool go = true; go;)"
for (elementType & element = *iter;go; go=false)
int main()
{
vector<int> v;
for (int i=0; i<10; ++i)
v.push_back(i);
foreach(int, e, vector<int>, v) // 鍦ㄨ繖閲屼嬌鐢╢oreach璇彞
{
printf("%d"n", e);
}
}
緇撴灉杈撳嚭寰堟紜紒
浜嬪疄涓婏紝鍦–++涓紝for璇彞浠ュ強鍏跺畠璇彞錛屽畠浠殑鏈川鏄熀浜庤綆楁満鎸囦護鐨勮繃紼嬫帶鍒惰鍙ワ紝鑰孋#涓殑foreach璇彞錛屽彲浠ョ湅浣滄槸鍩洪亶鍘嗚呰繖縐嶈璁℃ā寮忕殑璇彞銆傜紪紼嬭璦浠庡彧鍩轟簬璁$畻鏈烘寚浠ゅ埌鍩轟簬璁捐妯″紡錛岃繖搴旇涔熺畻鏄蔣浠跺彂灞曠殑榪涙鍚с?br />
鍦–++涓嬌鐢ㄦ枃涓畾涔夌殑foreach璇彞騫朵笉鑳芥彁楂樼▼搴忕殑鏁堢巼錛屼篃涓嶄細鏄庢樉闄嶄綆鏁堢巼銆俧oreach瀹忓彧鑳藉湪浠g爜灞傞潰涓婃湁浜涘ソ澶勶紝鍑忓皯涓浜涢噸澶嶇殑浠g爜錛屽鍔犱竴鐐瑰彲璇繪с傝璁¤繖涓畯錛屽氨褰撴槸涓叮鍛蟲妧宸ч錛岀帺涓鐜╋紝騫舵敮鎸佷竴涓嬮偅浜涘潥鍐蟲嫢鎶盋++鐨勬湅鍙嬩滑銆?br />
浣滆咃細鑻忔灄

]]>