锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美天天影院,亚洲欧美日韩中文在线制服,国产精品久久午夜夜伦鲁鲁http://m.shnenglu.com/xiaoluoluo/zh-cnSun, 16 Nov 2025 20:47:32 GMTSun, 16 Nov 2025 20:47:32 GMT60鏁e垪3http://m.shnenglu.com/xiaoluoluo/archive/2009/11/27/102070.html灝忕綏緗?/dc:creator>灝忕綏緗?/author>Fri, 27 Nov 2009 09:14:00 GMThttp://m.shnenglu.com/xiaoluoluo/archive/2009/11/27/102070.htmlhttp://m.shnenglu.com/xiaoluoluo/comments/102070.htmlhttp://m.shnenglu.com/xiaoluoluo/archive/2009/11/27/102070.html#Feedback7http://m.shnenglu.com/xiaoluoluo/comments/commentRss/102070.htmlhttp://m.shnenglu.com/xiaoluoluo/services/trackbacks/102070.html  鏁e垪榪欐槸鏈鍚庝竴绔犱簡錛屽揩姣曚笟浜嗭紝榪欏嚑澶╄刀蹇妸璁烘枃鍐欏畬錛屽埌鍥炲榪樹笉鍒頒袱涓湀錛岀瓟搴斿紶鑰佸笀鍐嶅幓瀹為獙瀹ゆ妸鍋氱殑涓滆タ鎬葷粨涓涓嬶紝鍏跺疄鎵撶畻鍦ㄥ疄楠屽鍐嶅憜涓や釜鏈堬紝鑵婃湀搴曞啀鍥烇紝鎯沖啓鐨勪笢瑗垮槢錛屾垜鎯崇爺絀朵竴涓媜pencv鐨勫唴瀛樼鐞嗘満鍒訛紝緇撳悎鎴戜拱鐨勯偅鏈珹pplied C++,欏轟究鎺ㄩ攢涓涓嬭繖鏈功錛岃繖鏈功寰堣杽錛屼袱鐧懼欏碉紝浠嬬粛濡備綍搴旂敤c++鏉ヨВ鍐沖紑鍙戝晢涓氳蔣浠舵椂鎵鍥烘湁鐨勯棶棰橈紝鏈闅捐兘鍙吹鐨勬槸錛屼粠澶磋嚦灝炬彁渚涗簡涓涓浘鍍忓鐞嗘鏋訛紝瀵逛簬鎯沖湪鏁板瓧鍥懼儚澶勭悊錛屾満鍣ㄨ瑙夋柟鍚戞繁鍏ユ帰絀訛紙涓嶆槸鍏蜂綋綆楁硶錛岃屾槸鏁翠釜杞歡鏋舵瀯錛夋湁鎸哄ぇ鐨勫惎鍙戞剰涔夌殑(铏界劧緗戜笂璇勪環涓嶆槸澶ソ錛屽彲鑳芥瘮杈冪墰鐨勪漢鐪嬩笉涓婂惂錛屼篃鏈夊彲鑳借繖鏈功姣旇緝鍋忛噸浜庢暟瀛楀浘鍍忛鍩?錛岃繕鎯沖鐨勪笢瑗垮憿錛屽勾鍓嶅拰騫村悗鍑犱釜鏈堢殑鏃墮棿Bjarne Stroustrup鐨勯偅鏈琧++,Mark Allen Weiss鐨勯偅鏈暟鎹粨鏋勶紝Jon Kleinberg 鐨勯偅鏈畻娉曡璁★紝鍚庝袱鏈功鏄亢鍦ㄥ浘鍍忓鐨勫浘涔﹁鎵懼埌鐨勶紝闈炲父鐨勪笉閿欏摝錛屽彲鎯滄瘯涓氬墠灝辮榪橈紝姝eソ鐫d績鎴戣刀绱х湅錛屽湪鑱斿悎涔﹀煄鐪嬪埌Richard Johnsonbaugh鐨凞iscrete Mathematics,绔熺劧鏄涓冪増浜嗭紝鍙兘鎬垜璧勮川澶樊鐪嬩笉鎳俴nuth鐨勯偅涓夋湰鍦g粡錛屽彧濂藉挰鐫鐗欎拱涓嬫潵鍏堢悽紓ㄧ悽紓ㄤ簡綆楁槸鎵撳熀紜浜嗭紝鍏徃鏈夐」鐩仛宓屽叆寮忓鉤鍙頒笂鐨勭紪璇戝櫒錛岃鏄湁鏃墮棿鐨勮瘽鐪嬬湅宓屽叆寮忔搷浣滅郴緇熷拰緙栬瘧鍘熺悊鍚э紝寰堟兂鍐欎釜緙栬瘧鍣紝榪欎箞澶氬ソ涔﹁鐪嬶紝鏈夋椂鍊欑湡涓嶆兂鍥炲榪囧勾浜嗭紝鍢垮樋錛岃鐫鐜╃殑錛屽埌鏃跺欏閲岃偗瀹氭潃鐚簡錛屼笉鍥炲幓鐪熸槸澶彲鎯滀簡銆?br>
1.鍐嶆暎鍒?br>   鍏跺疄灝辨槸鍓嶄袱綃囦腑鏈夋彁鍒扮殑rehash浜嗭紝瀵逛簬浣跨敤騫蟲柟鎺㈡祴鐨勫紑鏀懼畾鍒舵暎鍒楁硶錛屽鏋滆〃鐨勫厓绱犲~寰楀お婊★紝閭d箞鎿嶄綔鐨勮繍琛屾椂闂村皢寮濮嬫秷鑰楄繃闀匡紝涓旀彃鍏ユ搷浣滃彲鑳藉け璐ャ傝繖鍙兘鍙戠敓鍦ㄦ湁澶鍒犻櫎鍜屾彃鍏ユ販鍚堢殑鍦哄悎銆傛鏃訛紝涓涓В鍐蟲柟娉曟槸寤虹珛鍙﹀涓涓ぇ綰︿袱鍊嶅ぇ鐨勮〃(鑰屼笖浣跨敤涓涓浉鍏崇殑鏂版暎鍒楀嚱鏁?錛屾壂鎻忔暣涓師濮嬫暎鍒楄〃錛岃綆楁瘡涓?鏈垹闄ょ殑)鍏冪礌鐨勬柊鏁e垪鍊煎茍灝嗗叾鎻掑叆鍒版柊琛ㄤ腑銆傛暣涓搷浣滄垚涓哄啀鏁e垪(rehashing)銆傝繖鏄劇劧鏄竴縐嶉潪甯告槀璐電殑鎿嶄綔錛涘叾榪愯鏃墮棿涓篛(N),鍥犱負鏈塏涓厓绱犺鍐嶆暎鍒楄屼笖琛ㄧ殑澶у皬綰︿負2N錛屼笉榪囷紝鍥犱負涓嶆槸緇忓父鍙戠敓錛屾墍浠ュ疄闄呮晥鏋滃茍娌℃湁榪欎箞宸傜壒鍒槸錛屽湪鏈鍚庣殑鍐嶆暎鍒椾箣鍓嶅凡緇忓瓨鍦∟/2嬈℃彃鍏ワ紝鍥犳娣誨姞鍒版瘡涓彃鍏ヤ笂鐨勮姳璐瑰熀鏈槸涓涓父鏁板紑閿銆傚鏋滆繖縐嶆暟鎹粨鏋勬槸紼嬪簭鐨勪竴閮ㄥ垎錛岄偅涔堝叾褰卞搷鏄笉鏄庢樉鐨勩傚彟涓鏂歸潰錛屽鏋滃啀鏁e垪浣滀負浜や簰緋葷粺涓閮ㄥ垎榪愯錛岄偅涔堝叾鎻掑叆寮曡搗鍐嶆暎鍒楃殑鐢ㄦ埛灝嗕細鎰熷埌閫熷害鍑忔參銆?br>    鍐嶆暎鍒楀彲浠ョ敤騫蟲柟棰勬祴浠ュ縐嶆柟娉曞疄鐜般備竴縐嶅仛娉曟槸鍙琛ㄦ弧涓鍗婂氨鍐嶆暎鍒椼傚彟涓縐嶆瀬绔殑鏂規硶鏄彧鏈夊綋鎻掑叆澶辮觸鏃舵墠鍐嶆暎鍒椼傜涓夌鏂規硶鍗抽斾腑(middle-of-the-road)絳栫暐錛氬綋琛ㄥ埌杈炬煇涓涓濉洜瀛愭椂榪涜鍐嶆暎鍒椼傜敱浜庨殢鐫瑁呭~鍥犲瓙鐨勫鍔狅紝琛ㄧ殑鎬ц兘鐨勭‘鍦ㄤ笅闄嶏紝鍥犳錛屼互濂界殑鎴嚦鐐瑰疄鐜扮殑絎笁縐嶇瓥鐣ワ紝鍙兘鏄渶濂界殑絳栫暐銆?br>
 1//瀵規帰嫻嬫暎鍒楄〃鍜屽垎紱婚摼鎺ユ暎鍒楄〃鐨勫啀鏁e垪
 2void rehash()
 3{
 4    vector<HashEntry> oldArray = array;
 5    array.resize( nextPrime( 2* oldArray.size() ) );
 6    forint j = 0; j<array.size(); j++ )
 7        array[j].info = EMPTY;
 8    currentSize = 0;
 9    forint i = 0; i<oldArray.size(); i++ )
10        if( oldArray[i].info == ACTIVE )
11            insert( oldArray[i].element );
12}

13
14void rehash()
15{
16    vector<list<HashedObj> > oldLists = theLists;
17    theLists.resize( nextPrime( 2* theLists.size() ) );
18    forint j = 0; j<theLists.size(); j++ )
19        theLists[j].clear();
20    currentSize = 0;
21    forint i = 0; i<oldLists.size(); i++ )
22    {
23        list<HashedObj>::iterator itr = OldLists[i].begin();
24        while ( itr != oldLists[i].end() )
25            insert( *itr++ );
26    }

27}


2.鏍囧噯搴撲腑鐨勬暎鍒楄〃
    鏍囧噯搴撲腑涓嶅寘鎷瑂et鍜宮ap鐨勬暎鍒楄〃瀹炵幇銆備絾鏄紝璁稿鐨勭紪璇戝櫒鎻愪緵鍏鋒湁涓巗et鍜宮ap綾葷浉鍚岀殑鎴愬憳鍑芥暟鐨刪ash_set鍜宧ash_map.
    瑕佷嬌鐢╤ash_set鍜宧ash_map錛屽氨蹇呴』鏈夌浉搴旂殑鍖呭惈鎸囦護錛岃屼笖錛屽彲鑳戒篃闇瑕佺浉搴旂殑鍛藉悕絀洪棿銆傝繖涓よ呴兘鏄拰緙栬瘧鍣ㄧ浉鍏崇殑銆傛帴涓嬫潵榪樺繀欏繪彁渚涚浉搴旂殑綾誨瀷鍙傛暟鏉ヨ鏄?br>hash_set鍜宧ash_map銆傚浜巋ash_map錛岃繖浜涚被鍨嬪弬鏁板寘鎷敭鐨勭被鍨嬶紝鍊肩殑綾誨瀷錛屾暎鍒楀嚱鏁?榪斿洖鏃犵鍙鋒暣鏁?鍜屼竴涓浉絳夋ф搷浣滅銆傞仐鎲劇殑鏄紝鑷充簬閿拰鍊肩殑綾誨瀷鍙傛暟濡備綍
琛ㄧず榪樻槸緙栬瘧鍣ㄧ浉鍏崇殑銆?br>    涓嬩竴嬈++鐨勮緝澶х殑淇灝嗕笉鍙伩鍏嶅湴鍖呮嫭榪欎簺hash_set鍜宧ash_map涓殑涓涓?br>
3.鍙墿鏁e垪
    鏈鍚庤璁烘暟鎹噺澶ぇ浠ヨ嚦浜庤涓嶈繘涓誨瓨鐨勬儏鍐碉紝姝ゆ椂涓昏鑰冭檻鐨勬槸媯绱㈡暟鎹墍闇鐨勭鐩樺瓨鍙栨鏁般傚亣璁懼湪浠繪剰鏃跺埢閮芥湁N涓褰曡瀛樺偍錛孨鐨勫奸殢鏃墮棿鑰屽彉鍖栥傛澶栵紝鏈澶氬彲鎶奙涓褰曟斁鍏ヤ竴涓鐩樺尯鍧楋紝璁綧=4,濡傛灉浣跨敤鎺㈡祴鏁e垪鎴栧垎紱婚摼鎺ユ暎鍒楋紝閭d箞涓昏鐨勯棶棰樺湪浜庯紝鍗充嬌鏄悊鎯沖垎甯冪殑鏁e垪琛紝鍦ㄤ竴嬈℃煡鎵炬搷浣滀腑錛屽啿紿佷篃鍙兘寮曡搗瀵瑰涓尯鍧楃殑璁塊棶銆備笉浠呭姝わ紝褰撹〃鍙樺緱榪囨參鐨勬椂鍊欙紝蹇呴』鎵ц浠d環宸ㄥぇ鐨勫啀鏁e垪榪欎竴姝ワ紝瀹冮渶瑕丱(N)鐨勭鐩樿闂?br>    涓縐嶈仾鏄庣殑閫夋嫨鎴愪負鍙墿鏁e垪(extendible hashing),瀹冨厑璁哥敤涓ゆ紓佺洏璁塊棶鎵ц涓嬈℃煡鎵俱傛彃鍏ユ搷浣滀篃闇瑕佸緢灝戠殑紓佺洏璁塊棶.
   Extendible hashing from Wikipedia
   Extendible hashing
is a type of hash system which treats a hash as a bit string, and uses a trie for bucket lookup. Because of the hierarchal nature of the system, re-hashing is an incremental operation (done one bucket at a time, as needed). This means that time-sensitive applications are less affected by table growth than by standard full-table rehashes.

   

This is a more simplistic example from Fagin et al. (1979).

Assume that the hash function h(k) returns a binary number. The first i bits of each string will be used as indices to figure out where they will go in the "directory" (hash table). Additionally, i is the smallest number such that the first i bits of all keys are different.

Keys to be used:

h(k1) = 100100
h(k2) = 010110
h(k3) = 110110

Let's assume that for this particular example, the bucket size is 1. The first two keys to be inserted, k1 and k2, can be distinguished by the most significant bit, and would be inserted into the table as follows:

 directory
---------
|    0    |-----------> Bucket A (contains k2)
|---------|
|    1    |-----------> Bucket B (contains k1)
---------

Now, if k3 were to be hashed to the table, it wouldn't be enough to distinguish all three keys by one bit (because k3 and k1 have 1 as their leftmost bit. Also, because the bucket size is one, the table would overflow. Because comparing the first two most significant bits would give each key a unique location, the directory size is doubled as follows:

  directory
----------
|    00    |-----\
|----------|      ----------> Bucket A (contains k2)
|    01    |-----/
|----------|
|    10    |-----------> Bucket B (contains k1)
|----------|
|    11    |-----------> Bucket C (contains k3)
----------

And so now k1 and k3 have a unique location, being distinguished by the first two leftmost bits. Because k2 is in the top half of the table, both 00 and 01 point to it because there is no other key to compare to that begins with a 0.

4.灝忕粨
    鏁e垪琛ㄥ彲浠ョ敤鏉ヤ互甯告暟騫沖潎鏃墮棿瀹炵幇insert鍜宑ontains鎿嶄綔銆傚綋浣跨敤鏁e垪琛ㄦ椂錛屾敞鎰忚濡傝濉洜瀛愯繖鏍風殑緇嗚妭鏄壒鍒噸瑕佺殑錛屽惁鍒欐椂闂寸晫灝嗕笉鍐嶆湁鏁堛傚綋閿笉鏄煭瀛楃涓叉垨鏁存暟鏃訛紝浠旂粏閫夋嫨鏁e垪鍑芥暟涔熸槸寰堥噸瑕佺殑銆?br>    瀵逛簬鍒嗙閾炬帴鏁e垪娉曪紝铏界劧瑁呭脊鍥犲瓙涓嶅ぇ鏃舵ц兘騫朵笉鏄庢樉闄嶄綆錛屼絾瑁呭~鍥犲瓙榪樻槸搴旇鎺ヨ繎浜?錛屽浜庢帰嫻嬫暎鍒楋紝闄ら潪瀹屽叏涓嶅彲閬垮厤錛屽惁鍒欒濉洜瀛愪笉搴旇瓚呰繃0.5錛屽鏋滀嬌鐢ㄧ嚎鎬ф帰嫻嬶紝閭d箞鎬ц兘闅忕潃瑁呭~鍥犲瓙鎺ヨ繎浜?鑰屾ラ熶笅闄嶃傚啀鏁e垪榪愮畻鍙互閫氳繃浣胯〃澧為暱(鎴栨敹緙?鏉ュ疄鐜幫紝榪欐牱鍙互淇濇寔鍚堢悊鐨勮濉洜瀛愩傚浜庣┖闂寸揣緙哄茍涓斾笉鍙兘澹版槑宸ㄥぇ鏁e垪琛ㄧ殑鎯呭喌錛岃繖鏄緢閲嶈鐨勩?br>    浜屽弶鏌ユ壘鏍戜篃鍙互鐢ㄦ潵瀹炵幇insert鍜宑ontains鎿嶄綔銆傝櫧鐒跺鉤鍧囨椂闂寸晫涓篛(logN)錛屼絾鏄簩鍙夋煡鎵炬爲涔熸敮鎸侀偅浜涢渶瑕佹帓搴忕殑渚嬬▼錛屼粠鑰屽姛鑳芥洿寮哄ぇ錛屼嬌鐢ㄦ暎鍒楄〃涓嶅彲鑳芥壘鍑烘渶灝忓厓绱犮傞櫎闈炲噯紜煡閬撲竴涓瓧絎︿覆錛屽惁鍒欐暎鍒楄〃涔熶笉鍙兘鏈夋晥鍦版煡鎵懼畠銆備簩鍙夋煡鎵炬爲鍙互榪呴熸壘鍒頒竴瀹氳寖鍥村唴鐨勬墍鏈夐」錛屾暎鍒楄〃鍗村仛涓嶅埌銆備笉浠呭姝わ紝鍥犱負鏌ユ壘鏍戜笉闇瑕佷箻娉曞拰闄ゆ硶錛孫(logN)榪欎釜鏃墮棿鐣屼篃涓嶅繀姣擮(1)澶ч偅涔堝銆?br>    鍙︿竴鏂歸潰錛屾暎鍒楃殑鏈鍧忔儏褰竴鑸潵鑷簬瀹炵幇閿欒錛岃屾湁搴忕殑杈撳叆鍗村彲鑳戒嬌浜屽弶鏍戣繍琛屽緱寰堝樊銆傚鉤琛℃煡鎵炬爲瀹炵幇鐨勪唬浠風浉褰撻珮銆傚洜姝わ紝濡傛灉涓嶉渶瑕佹帓搴忕殑淇℃伅鎴栬呬笉紜畾杈撳叆鏄惁宸茬粡鎺掑簭錛岄偅涔堝氨搴旇閫夋嫨鏁e垪榪欑鏁版嵁緇撴瀯銆?br>    鏁e垪鐨勫簲鐢ㄥ緢騫褲傜紪璇戝櫒浣跨敤鏁e垪琛ㄨ窡韙簮浠g爜涓0鏄庣殑鍙橀噺錛岃繖縐嶆暟鎹粨鏋勫彨鍋氱鍙瘋〃(symbol table)銆傛暎鍒楄〃鏃惰繖縐嶉棶棰樼殑鐞嗘兂閫夋嫨銆傛爣璇嗙涓鑸兘涓嶉暱錛屽洜姝ゆ暎鍒楀嚱鏁拌兘澶熻繀閫熷畬鎴愯繍綆椼傛澶栵紝鎸夊瓧姣嶉『搴忔帓搴忓彉閲忛氬父涔熸槸涓嶅繀瑕佺殑銆?br>    鏁e垪琛ㄩ傜敤浜庝換浣曞叾鑺傜偣鏈夊疄鍚嶈屼笉鏄暟瀛楀悕鐨勫浘璁洪棶棰樸傝繖閲岋紝褰撹緭鍏ヨ璇誨叆鐨勬椂鍊欙紝瀹氱偣鍒欐寜鐓у畠浠嚭鐜扮殑欏哄簭浠?寮濮嬫寚瀹氫負涓浜涙暣鏁般傚啀鏈夛紝杈撳叆寰堝彲鑳芥湁涓緇勬寜瀛楁瘝欏哄簭鎺掑垪鐨勯」銆備緥濡傦紝欏剁偣鍙互鏄綆楁満銆傛鏃訛紝濡傛灉涓涓壒瀹氱殑璁$畻涓績鎶婂畠鐨勮綆楁満鍒楄〃鎴恑bm1,ibm2,ibm3...閭d箞錛岃嫢浣跨敤鏌ユ壘鏍戝垯鍦ㄦ晥鐜囨柟闈㈠緢鍙兘浼氭湁鎴忓墽鎬х殑緇撴灉銆?br>   鏁e垪琛ㄧ殑絎笁縐嶅父瑙佺殑鐢ㄩ斿疄鍦ㄤ負娓告垙緙栧埗鐨勭▼搴忎腑銆傚綋紼嬪簭鎼滅儲娓告垙鐨勪笉鍚岀殑榪愬姩璺緞鏃訛紝瀹冮氳繃璁$畻鍩轟簬浣嶇疆鐨勬暎鍒楀嚱鏁拌岃窡韙竴浜涘凡鐭ョ殑浣嶇疆(騫舵妸瀵逛簬璇ヤ綅緗殑縐誨姩瀛樺偍璧鋒潵)銆傚鏋滃悓鏍風殑浣嶇疆鍐嶆鍑虹幇錛岀▼搴忛氬父閫氳繃綆鍗曠殑縐誨姩鍙樻崲鏉ラ伩鍏嶆槀璐電殑閲嶅璁$畻銆傛父鎴忕▼搴忕殑榪欑涓鑸壒鐐瑰彨鍋氱疆鎹㈣〃(transposition table錛?
   鏁e垪鐨勫彟涓涓敤閫旀槸鍦ㄧ嚎鎷煎啓媯鏌ョ▼搴忋傚鏋滄嫾鍐欐鏌ョ▼搴忕殑涓昏鍔熻兘鏄鏌ユ嫾鍐欓敊璇?鑰岄潪綰犳閿欒),閭d箞鍙互棰勫厛灝嗘暣涓瘝鍏歌繘琛屾暎鍒楋紝榪欐牱灝卞彲浠ュ湪甯告暟鏃墮棿鍐呮鏌ュ崟璇嶆嫾鍐欍傛暎鍒楄〃寰堥傚悎榪欓」宸ヤ綔錛屽洜涓轟互瀛楁瘝欏哄簭鎺掑垪鍗曡瘝騫朵笉閲嶈錛岃屼互瀹冧滑鍦ㄦ枃浠朵腑鍑虹幇鐨勯『搴忔樉紺洪敊璇嫾鍐欏綋鐒朵篃鏄彲浠ユ帴鍙楃殑銆?/span>


]]>
鑰佸璋坒uture of c++http://m.shnenglu.com/xiaoluoluo/archive/2009/11/27/102021.html灝忕綏緗?/dc:creator>灝忕綏緗?/author>Thu, 26 Nov 2009 16:23:00 GMThttp://m.shnenglu.com/xiaoluoluo/archive/2009/11/27/102021.htmlhttp://m.shnenglu.com/xiaoluoluo/comments/102021.htmlhttp://m.shnenglu.com/xiaoluoluo/archive/2009/11/27/102021.html#Feedback2http://m.shnenglu.com/xiaoluoluo/comments/commentRss/102021.htmlhttp://m.shnenglu.com/xiaoluoluo/services/trackbacks/102021.html    鍙堝幓Bartosz鐨刢++ in action璁哄潧涓婅漿浜嗚漿錛岀湅鍒頒竴涓佸闂瓸artosz鍝ュ摜future of c++鐨勫笘瀛?璁哄潧姣旇緝鍐鋒竻錛屾病鏈塩++er鍜宩avaer浠殑浜掔浉鐐槳錛孊artosz鏈夋剰鎬濈殑鏄病蹇樿鍚戝悇浣嶆帹閿浠栫殑D璇█銆傘傘?br> 

helmi:

Hi, I just found this very useful site and I have read almost all of tutorial, guide, articles. smile.gif

I just ask everybody opinion on the future of C/C++ because a lot of other programming language out there now days. What do you think since more applications develop as on web base platform? This is just my observation in my country. I really like coding in C++ because I can feel I'm doing low level programming. I do have write game using directX as a hobby but to sustain, I have need to write applications using php, asp .net and jsp.


ps: Sorry for my bad English.

Bartosz錛?/strong>
I see programming tasks as a pyramid. The base of the pyramid is formed by small tasks that don't require sophisticated languages or tools. That's where most of the programming is done. The top of the pyramid are tough tasks that just can't be done using Java or C#. Right now the language at the top is C++. There aren't very many complex tasks, so the top of the pyramid is rather narrow, but then the number of seasoned C++ programmers is also relatively small. In the United States, C++ programmers are in high demand (and are very well paid).

Will C++ keep its top position? I don't know. There are very many aspects of C++ that are very unsatisfactory. I am now involved in the development of the D language (http://digitalmars.com/d/), which has a chance of replacing C++.

helmi:
"the number of seasoned C++ programmers is also relatively small. In the United States, C++ programmers are in high demand (and are very well paid)."

Really? I should go working in the United States smile.gif


I have read of about the D language in a game forum. It's has a lot of features and so powerful but still need improvement, good IDE etc.

Bartosz錛?/strong>
QUOTE (helmi @ Feb 1 2007, 05:30 PM) *
I have read of about the D language in a game forum. It's has a lot of features and so powerful but still need improvement, good IDE etc.

That's right. It needs an IDE, tools, and libraries. But it has a good chance of acqiring them quickly.

peter:
QUOTE (Bartosz @ Feb 2 2007, 04:32 AM) *
That's right. It needs an IDE, tools, and libraries. But it has a good chance of acqiring them quickly.


It would be great if there were a Visual Studio package for D smile.gif.

Unfortunately after trying to figure out how to do that by
browsing the Visual Studio SKD documentation and samples
for the last two days I finally gave up sad.gif.

There are two frameworks that are supposed to help
with the package development. One is written in C#
and the second is in C++ (depends heavily on Microsoft's ATL).
These are pretty heavy beasts and doesn't really
help if the developer doesn't get The Big Picture
(as I failed to get).

So, I tried to implement a package from scratch.

So far I get the IDE to show a new project type
and to call my implementation of the IVsProjectFactory
interface. When the IDE calls the
IVsProjectFactory::CreateProject I copy
the project template files into the new project
directory. Then I create an object implementating
the IVsProject3 and IVsHierarchy interfaces and
return it back to the IDE.
This is where I am stuck. Although the IDE then
calls some methods on the IVsProject3 and
IVsHierarchy interfaces, querying and setting
some properties. The IDE doesn't show the
new project node in the solution explorer.
There is only the topmost solution node
"Solution 'Project1' (1 Project)", nothing more.

And as I said before I was not able to figure out
what am I supposed to do after the project is created... sad.gif

~Peter

Bartosz錛?/strong>
The best resource in this kind of projects are Microsoft forums. Here's a thread about adding language services to VS
adding language services to VS , and here's a more comprehensive list . Without these forums I would have never been able to embed the internet browser control in Code Co-op.

Another-- maybe even more attractive--option is to write an extension to Eclipse. There's been some discussion about it in the D forum, but it doesn't look like there are many volunteers.

peter:
Speaking about the D Programming Language.

How does it handle source file dependencies?

If I have two files File1.d and File2.d
and File2.d imports File1, then when
File1.d changes both files must be
recompiled.

Is my assumption correct?

~Peter

Bartosz:
This is a functionality of "make", not the compiler. But if you mean: Should both files be recompiled?; the answer is, yes.

Note also that you can generate D interface files, .di, which speed up the import process. These too have to be recompiled whenever their correspondig D file changes.

peter:
(Maybe you could add a new forum section about "D Programming" :-)

I wonder how one implements resource ownership transfer semantic in D?

~Peter

Bartosz:
QUOTE (peter @ Feb 15 2007, 07:34 AM) *
(Maybe you could add a new forum section about "D Programming" :-)

I will do exactly that!

helmi:
It is a good idea.

James:
I hope none of you mind me butting in for just a second.

I am currently a student in high school and I am interested in computer science and programming. I am fluent (on an intermediate level) in PHP (HTML, XML, and some minor AJAX/JS included). I would say I have a decent understanding of general coding practice/syntax/what have you, so I am certainly not starting from scratch.

In terms of D, C++, C#, Java, etc., where should I be focusing my efforts? I know there really isn't a straight forward answer, but maybe some of you could offer your opinion. I'm not necessarily looking for something thats going to land me the biggest paycheck (although I would be interested in what you have to say on the subject), but more something that will give me a good background for future endeavors, whether or not it be a new language.

I'm not sure if I can really go wrong, but I am just trying to find something that might suit me the best. I am not setting out to make anything in particular, like games or stuff along those lines. As said, I am just interest in furthering my understanding and setting myself up for down the road. Any tips you can offer me would be great.

Thanks

James

Bartosz:
QUOTE (James @ Feb 20 2007, 02:02 PM) *
In terms of D, C++, C#, Java, etc., where should I be focusing my efforts?
These languages have very similar structure, so my suggestion would be to learn them all. In order of difficulty, from easiest to hardest:
- Java
- C#
- D
- C++
Specializing in one single language not only pidgenholes you as a developer, but also prevents you from learning different programming styles.
James:
Thanks. I appreciate the reply.

Dave:
I've programming in Java, C#, C++ and many other languages over many years.

I've never seen any commercial demand for D so that may well be a stumbling point. I would look very closely at what happened to Borland/CodeGear. Of course alot of unix based open source languages have done well so maybe i'm wrong.

Bjarne is working on his next version of C++ called C++ 0x, I doubt even this will get traction in many places.

Assembler, C and C++ were general purpose system level languages, things have moved on now, sure they are still valid for development of the OS, drivers, performance and memory footprint critical software, but they do not support many of the higher level primitives business software and web developers want.

Most programmers in the world however don't work on the large volume projects where the increased development costs can be amortised. They work on custom in house solutions to business problems, this is why we have Java and C#, they are the modern equivalent of Smalltalk that is now feasible due to vast hardware resources. These projects generally last only a few years before a rewrite making developer cost a large factor, and hardware cost fairly insignificant.

I would therefore strongly advise most people to learn at least one high level language to go with their lower level languages in order to have a successful career. Its unfortunate alot of the old skills are being lost in assembler, compiler design etc. I would still certainly reccomend most new students learning C# or Java over C/C++ or D as their first language.

Eclipse is an excellent open source IDE, It already supports multiple languages, and runs on multiple OS's it might be a better bet for D than Visual Studio.

ivec:
QUOTE (Dave @ Aug 23 2007, 12:25 PM) *
Bjarne is working on his next version of C++ called C++ 0x, I doubt even this will get traction in many places.


This is just so inaccurate that I have to clarify:
This is not about "Bjarne working on his next version of his language".
It is the ISO C++ standard committee working on the next revision of the standard C++ language. This is a collaborative and active process, as can be seen at http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ .

When the standard is adopted (expected in a couple of years), you can be certain that all vendors of C++ compilers will be implementing the features introduced in the new standard. I am very confident that the new standard will have no problem getting traction wherever C++ remains relevant.

--------------------

Bartosz:
Yes, a lot of bright people work on the development of C++, not only in the Standards Committee; and I expect C++ 0x to introduce a lot of great features.

There are however some aspects of language development that are not reachable from the current state of C++, because of backwards compatibility. That's where D will shine. Version 2.0 of D is expected about the same time as C++ 0x-- meaning, before 2010. (The 0x stands for 200x--C++ is cutting it real close!).

As an example, D will unify templates and function templates--In D a function is just a fully specialized template.

hansgostajonsson:
Hello! As a hobby programmer I am hardly qualified to write here but: When I studied programming at university in 1987 I learnt pascal and loved it. It was said to be the future, but "for old times sake" we were also required to learn cobol and fortran - 2 languages then thought to be barely breathing. They seem , however, still to be hanging around, pascal is still in swing as Delphi but it was not so long after I learnt it said to be decrepit and I had to move on to c and then c++ if I wanted to move with the times. Then Java was the swinging language and so on to c#. Now D looms high on the horizon. It may seem a naive question but why can't d be implemented as a development of c++ - to an amateur it seems a look alike. hans jönsson

Bartosz:
If you look at the development of C++ over the years you'll notice that virtually every feature that's been added to the language stays with it, whether it made sense or not. If you imagine C as a fast but flimsy and dangerous ship, C++ grew layers and layers of barnacles over it, in the hope to strengthening it. Instead C++ has kept all the weaknesses of C at its core; plus it made if very difficult not only to master, but even to start learning.

The direction of D that I'm advocating is to make it as easy and safe for beginners as Java or C#. You should be able to use D productively without the need to understand pointers or memory management (D is garbage-collected). D has built in (and very efficient) arrays and strings. Classes are treated pretty much like in Java.

But unlike Java, D also offers all the sophisticated features of C++, except that they were desingned into the language from the start. Instead of layers of barnacles you have some well designed solid language architecture.

peter:
Personally, I don't believe that Yet Another Programming Language Based on C/C++, Java, etc. will make our coding and code maintaining life any easier. Programming languages evolved over 50 years yet I think the most radical step to writing more correct and more maintainable software was that from FORTRAN to ALGOL. From that point on any new language (from the ALGOL family) brings IMHO only very marginal improvements wrt. code maintainability and I don't think this will change in the future. Also after that 50 year of programming evolution and experience our best programming tool is still a simple text editor. I don't think this is right.

Presently, I'm slowly turning my attention to other programming paradigms. From them I see the Data Flow and Multi Agent paradigms most promising partly due to their great potential to exploit the future many-core processors. Also they lend themselves more easily to "diagrammatic" and/or visual programming than present day mainstream programming languages.

Just my 鈧?.02

~Peter

P.S. I sometimes browse through the digitalmars.D newsserver and, frankly, based on most posts there the very LAST thing I'd say about the D programming language is: "well designed solid language architecture".

Also, I looked at the sources for the D compiler and the first immediate thought was: What programming language can design a person with such coding practices... I mean no offense to Walter Bright (I really admire his persistence and devotion to his creation), but those were just my feelings.

hansgostajonsson:
Thanks for replies. A few musings. A new language, like reorganizations, give new hope an generally we learn something in the process. I am a newly retired psychologist with old studies in computer science. Psychology differs from other sciences - it is one in many of it's fields - in that it has been founded a couple of times ( Gestalt psychology, functionalism, behaviourism) - not once like most other sciences. It seems to be the same for language development in computer science and you long for something like the explanation of dna when genetics became molecular biology and never has looked back again. Parhaps a futile dream. It seems that d is based on practical considerations rather than theoretical progress and therefore will be superseeded by the next language but not killed off. I think one problem is that new languages are not good enough to kill once and for all older languages. We will have a lot of not so good but good enough ones hanging around - the same in psychology. Just a few musings. Thanks for a very interesting site. greetings hans jönsson

Bartosz:
QUOTE (peter @ Mar 4 2008, 05:22 AM) *
Personally, I don't believe that Yet Another Programming Language Based on C/C++, Java, etc. will make our coding and code maintaining life any easier. Programming languages evolved over 50 years yet I think the most radical step to writing more correct and more maintainable software was that from FORTRAN to ALGOL. From that point on any new language (from the ALGOL family) brings IMHO only very marginal improvements wrt. code maintainability and I don't think this will change in the future.

A lot happend since ALGOL. Probably the biggest revolution was the introduction of the object oriented paradigm. OO programs are a lot more maintainable. In other areas progress was more quantitative than qualitative, but the accumulation of changes can make a lot of difference. Garbage collection, for instance, has entered the mainstream. So did functional programming techniques. There was also a shift of emphasis towards safe programming. Not to mention the latest revolution--multicore. Java bit the bullet by defining a memory model for parallel programming. C++ is working on it too.
QUOTE
Also after that 50 year of programming evolution and experience our best programming tool is still a simple text editor. I don't think this is right.
No, it's not right. Personally, I use Visual Studio in my C++ development. I also used Eclipse for Java. C++ has some of the worst development tools because it's such a hard language to parse. By the way, there is a D plugin for Eclipse. I didn't use it because it doesn't support D 2.0 yet.
QUOTE
Presently, I'm slowly turning my attention to other programming paradigms. From them I see the Data Flow and Multi Agent paradigms most promising partly due to their great potential to exploit the future many-core processors. Also they lend themselves more easily to "diagrammatic" and/or visual programming than present day mainstream programming languages.
These are all cool paradigms, but they are still far from the mainstream. My current interest is in Software Transactional Memory as the new paradigm for multicore programming.
QUOTE
P.S. I sometimes browse through the digitalmars.D newsserver and, frankly, based on most posts there the very LAST thing I'd say about the D programming language is: "well designed solid language architecture".
Point taken. Version 2.0 is still in flux. It might look like there is a lot of random experimenting, but there is solid theory behind most of it. In fact I'm pushing for updating the D manifesto to better explain the goals of the language. There is also a big difference between version 1.0 and 2.0. Version 1.0 was more of a "better C++". 2.0 is way beyond that.
QUOTE
Also, I looked at the sources for the D compiler and the first immediate thought was: What programming language can design a person with such coding practices... I mean no offense to Walter Bright (I really admire his persistence and devotion to his creation), but those were just my feelings.

Touche! What can I say, I'm not fond of Walter's programming style either wink.gif.

Bartosz:
QUOTE (hansgostajonsson @ Mar 4 2008, 12:51 PM) *
It seems that d is based on practical considerations rather than theoretical progress

Practical considerations make or break a language. There are some theoretically beautiful languages that nobody uses outside of the academia because they are not practical.

But there's also a lot of theoretical progress in computer science that is being incorporated into D.

Hossein:
QUOTE (Bartosz @ Mar 4 2008, 11:10 PM) *
But there's also a lot of theoretical progress in computer science that is being incorporated into D.


Wow! This is what amused me in the first place in fact! biggrin.gif OK, it seems that I can deny my extreme laziness here, and ask for this from you (Bartosz): Could you please give a list of all these nice features of D which attract us -- the snubish [wink.gif] people of Theoretical Computer Science of academia?

(And, BTW, like I mentioned in some other posting: People of academia wouldn't really like it that they don't publish proceedings in their D conferences...)

Cheers,
--Hossein

Bartosz:
We are trying to incorporate the latest PL trends in D, sometimes even before they mature wink.gif.

One major area is safe programming. There's been a lot of research into proving soundness of various languages using operational semantics. It culminated in the soundness proof for Featherweight (Generic) Java. Although it's not a goal of D to be a sound language (we do want pointers after all), we are defining a sound subset of D. In particular, we have a program that can translate Java programs into this subset. We will have one-to-one correspondence between Java semantics and the semantics of a subset of D (which is equivalent to having denotational semantics for the D subset).

We are planning on extending the safe D subset with other sound features, such as discriminated unions and elements of functional programming. D already supports anonymous functions and closures.

The other major area is concurrent programming. Again, Java leads the crowd with its memory model. D's memory model will most likely resemble that of C++ (still in the form of a proposal). The difference between the Java model and the C++ model is that Java gives some guarantees even for programs with race conditions-- C++ doesn't. So a racy program in C++ may exhibit undefined behavior. On the other hand Java has a virtual machine that may enforce a lot more during runtime that can be accomplished in a compiled language.

How can we support safe concurrency in the presence of races--or eliminate the races altogether? The idea is to build software transactional memory into D. Even though STM might not offer the best performance, it is much safer (and easier) than lock-based programming. Especially if we can build support for transactions into the type system, as has been done for Concurrent Haskell.

markm:
IDE for D use CodeBlocks, version 8.02 supports D.

http://www.codeblocks.org/














]]>
鏁e垪2http://m.shnenglu.com/xiaoluoluo/archive/2009/11/26/102001.html灝忕綏緗?/dc:creator>灝忕綏緗?/author>Thu, 26 Nov 2009 12:20:00 GMThttp://m.shnenglu.com/xiaoluoluo/archive/2009/11/26/102001.htmlhttp://m.shnenglu.com/xiaoluoluo/comments/102001.htmlhttp://m.shnenglu.com/xiaoluoluo/archive/2009/11/26/102001.html#Feedback0http://m.shnenglu.com/xiaoluoluo/comments/commentRss/102001.htmlhttp://m.shnenglu.com/xiaoluoluo/services/trackbacks/102001.html3 涓嶄嬌鐢ㄩ摼琛ㄧ殑鏁e垪琛?br>    鍒嗙閾炬帴鏁e垪綆楁硶鐨勭己鐐規槸浣跨敤涓浜涢摼琛ㄣ傜敱浜庣粰鏂板崟鍏冨垎閰嶅湴鍧闇瑕佹椂闂達紝鍥犳榪欏氨瀵艱嚧綆楁硶鐨勯熷害鏈変簺緙撴參錛屽悓鏃剁畻娉曞疄闄呬笂榪樿姹傜浜岀鏁版嵁緇撴瀯鐨勫疄鐜般傝В鍐沖啿紿佺殑鍙︿竴涓柟娉曟槸褰撳啿紿佸彂鐢熸椂灝卞皾璇曢夋嫨鍙︿竴涓崟鍏冿紝鐩村埌鎵懼埌絀虹殑鍗曞厓銆傛洿姝e紡鍦幫紝鍗曞厓hi(x)=(hash(x)+f(i))mod TableSize,涓攆(0)=0.鍑芥暟f鏄啿紿佽В鍐沖嚱鏁般傚洜涓烘墍鏈夌殑鏁版嵁閮借緗叆琛ㄥ唴錛屾墍浠ヤ嬌鐢ㄨ繖涓柟妗堟墍闇瑕佺殑琛ㄨ姣斿垎紱婚摼鎺ユ暎鍒楅渶瑕佺殑琛ㄥぇ銆備竴鑸鏉ワ紝瀵逛笉浣跨敤鍒嗙閾炬帴娉曠殑鏁e垪琛ㄦ潵璇達紝鍏惰濉洜瀛愬簲璇ヤ綆浜?#955;=0.5銆傛垜浠О榪欐牱鐨勮〃涓烘帰嫻嬫暎鍒楄〃(probing hash tables)銆?br>    (1)褰揻鏄痠鐨勭嚎鎬у嚱鏁版椂錛屼負綰挎ф帰嫻嬶紝涓鑸儏鍐典笅f(i)=i錛岀嚎鎬ф帰嫻嬪鏄撳湪鍗犳嵁鐨勫崟鍏冨艦鎴愪竴浜涘尯鍧楋紝鍏剁粨鏋滄垚涓轟竴嬈¤仛闆?primary clustering)銆?br>    (2)騫蟲柟鎺㈡祴鏄秷闄ょ嚎鎬ф帰嫻嬩腑涓嬈¤仛闆嗛棶棰樼殑鍐茬獊瑙e喅鏂規硶銆傚鉤鏂規帰嫻嬪氨鏄啿紿佸嚱鏁頒負浜屾鍑芥暟鐨勬帰嫻嬫柟娉曘傛祦琛岀殑閫夋嫨鏄痜(i)=i2.
               瀹氱悊錛氬鏋滀嬌鐢ㄥ鉤鏂規帰嫻嬶紝涓旇〃鐨勫ぇ灝忔槸绱犳暟錛岄偅涔堝綋琛ㄨ嚦灝戞湁涓鍗婃槸絀虹殑鏃跺欙紝鎬昏兘澶熸彃鍏ヤ竴涓柊鐨勫厓绱犮?br>        濡傛灉鍝曡〃鏈夋瘮涓鍗婂涓涓殑浣嶇疆琚~婊★紝閭d箞鎻掑叆閮芥湁鍙兘澶辮觸(铏界劧榪欑鍙兘鎬ф瀬灝?銆傚彟澶栵紝琛ㄧ殑澶у皬鏄礌鏁頒篃闈炲父閲嶈銆傚鏋滆〃鐨勫ぇ灝忎笉鏄礌鏁幫紝鍒欏閫夊崟鍏?br>        鐨勪釜鏁板彲鑳戒細閿愬噺銆備緥濡傦紝鑻ヨ〃鐨勫ぇ灝忔槸16錛岄偅涔堝閫夊崟鍏冨彧鑳藉湪璺濇暎鍒楀?錛?鎴?榪滃銆?br>        鍦ㄦ帰嫻嬫暎鍒楄〃涓爣鍑嗙殑鍒犻櫎鎿嶄綔涓嶈兘鎵ц錛屽洜涓虹浉搴旂殑鍗曞厓鍙兘宸茬粡寮曡搗榪囧啿紿侊紝鍏冪礌緇曡繃瀹冨瓨鍌ㄥ湪鍒銆傚洜姝わ紝鎺㈡祴鏁e垪琛ㄩ渶瑕佹噿鎯板垹闄ゃ?/span>
        瀹炵幇鎺㈡祴鏁e垪琛ㄦ墍闇瑕佺殑綾繪帴鍙e湪涓嬪浘涓粰鍑恒傝繖閲屼笉浣跨敤閾捐〃鏁扮粍錛岃屾槸浣跨敤鏁e垪琛ㄩ」鍗曞厓鏁扮粍銆傚祵濂楃殑綾籋ashEntry瀛樺偍鍦╥nfo鎴愬憳涓竴涓」鐨勭姸鎬侊紝榪欎釜鐘舵佸彲
        浠ユ槸ACTIVE,EMPTY鎴朌ELETED銆?br>
   

 1//浣跨敤鎺㈡祴絳栫暐鐨勬暎鍒楄〃鐨勭被鎺ュ彛錛屽寘鎷祵濂楃殑HashEntry
 2  綾?br> 3template <typename HashedObj>
 4class HashTable
 5{
 6public:
 7    explicit HashTable( int size = 101 );
 8    
 9    bool contains( const HashedObj &x ) const;
10    
11    void makeEmpty();
12    bool insert( const HashedObj &x );
13    bool remove( const HashedObj &x );
14    
15    emum EntryType (ACTIVE,EMPTY,DELETED );
16
17private:
18    struct HashEntry
19    {
20        HashedObj element;
21        EntryType info;
22        HashEntry( const HashedObj & e = HashedObj(), EntryType i = EMPTY ) : element(e), info(i) { }
23    }
;
24
25    vector<HashEntry> array;
26    int currentSize;
27 
28    bool isActive( int currentPos ) const;
29    int findPos( const HashedObj &x ) const;
30    void rehash();
31    int myhash( const HashedObj &x ) const;
32}
;


 

 1//鍒濆鍖栧鉤鏂規帰嫻嬫暎鍒楄〃鐨勪緥紼?/span>
 2explicit HashTable( int size = 101 ) : array(nextPrime( size ) )
 3{ makeEmpty(); }
 4
 5void makeEmpty()
 6{
 7    currentSize = 0;
 8    forint i = 0; i<array.size(); i++ )
 9        array[i].info = EMPTY;
10}



 

 1//浣跨敤騫蟲柟鎺㈡祴榪涜鏁e垪鐨刢ontains渚嬬▼
 2bool contains( const HashedObj &x ) const
 3{
 4    return isActive( findPos(x) ); }

 5
 6int findPos( const HashedObj &x ) const
 7{
 8    int offset = 1;
 9    int currentPos = myhash(x);
10    
11    //涓嬮潰鏄竴涓皬灝忕殑trick
12    while ( array[ currentPos ].info != EMPTY && array[ currentPos ].element != x )
13    {
14        currentPos += offset;
15        offset += 2;
16        if( currentPos >= array.size() )
17        currentPos -= array.size();
18    }

19    
20    return currentPos;
21}

22
23bool isActive( int currentPos ) const
24{
25    return array[ currentPos ].info == ACTIVE; }



 

 1//浣跨敤騫蟲柟鎺㈡祴鐨勬暎鍒楄〃鐨刬nsert鍜宺emove渚嬬▼
 2bool insert ( const HashedObj &x )
 3{
 4    int currentPos = findPos( x );
 5    if ( isActive ( currentPos ) )
 6        return false;
 7    
 8    array[ currentPos ] = hashEntry( x, ACTIVE );
 9    if++currentSize > array.size() / 2 )
10        rehash();
11    
12    return true;
13}

14
15bool remove( const HashedObj &x )
16{
17    int currentPos = findPos(x);
18    if ( !isActive( currentPos ) )
19        return false;
20    
21    array[ currentPos ].info = DELETED;//浼犺涓殑鎳掓儼鍒犻櫎
22    return true;
23}


  (3)鏈鍚庝竴涓啿紿佽В鍐蟲柟娉曟槸鍙屾暎鍒?double hashing)銆傚浜庡弻鏁e垪錛屼竴縐嶆祦琛岀殑閫夋嫨鏄痜(i)=i*hash2(x)銆傝繖涓叕寮忔槸璇達紝灝嗙浜屼釜鏁e垪鍑芥暟搴旂敤鍒皒騫跺湪璺濈hash2(x),2hash2(x),
      ...絳夊鎺㈡祴銆俬ash2(x)閫夋嫨涓嶅ソ灝嗕細闈炲父緋熺硶銆?br>   
.



]]>
鏁版嵁緇撴瀯-鏁e垪1http://m.shnenglu.com/xiaoluoluo/archive/2009/11/25/101935.html灝忕綏緗?/dc:creator>灝忕綏緗?/author>Wed, 25 Nov 2009 14:22:00 GMThttp://m.shnenglu.com/xiaoluoluo/archive/2009/11/25/101935.htmlhttp://m.shnenglu.com/xiaoluoluo/comments/101935.htmlhttp://m.shnenglu.com/xiaoluoluo/archive/2009/11/25/101935.html#Feedback0http://m.shnenglu.com/xiaoluoluo/comments/commentRss/101935.htmlhttp://m.shnenglu.com/xiaoluoluo/services/trackbacks/101935.html    鏈榪戝湪鐪婤artosz Milewski鐨凜++ In Action Industrial-Strength Programming Techniques錛岃繖鏈功寰堜笉閿欙紝瀹冧笉鏄璦鍩虹鏁欑▼錛屽叏涔︿富瑕佷粙緇嶄簡璁稿宸ヤ笟寮哄害鐨勭紪紼嬫妧鏈紝濡傛竻鐞嗭紝闅愯棌瀹炵幇緇嗚妭錛岃祫婧愮鐞嗭紝鍏變韓錛岃祫婧愮鐞嗭紝浣跨敤鏍囧噯妯℃澘搴擄紝閲嶈澆榪愮畻絎︾瓑鎶鏈傝繖鏄疊artosz Milewski鐨勭畝浠?Bartosz Milewski錛孋++ In Action 鐨勪綔鑰呫傛槸Reliable Software鍏徃鐨勬昏錛孯eliable Software鍏徃鏄竴瀹朵負紼嬪簭鍛樺埗閫犻珮璐ㄩ噺寮鍙戝伐鍏風殑鍏徃銆傚湪榪囧幓鍑犲勾闂達紝Bartosz Milewski鍦ㄥ瀹剁煡鍚嶆潅蹇楀彂琛ㄤ簡澶ч噺鎶鏈枃绔犮傚湪寰蔣宸ョ▼宸ヤ綔鐨?騫存湡闂達紝浠栨媴浠籛indows2000涓瑿ontent Index緇勪歡鐨勫紑鍙戜富綆★紝浠栨浘緇忓湪娉㈠叞鐨刉roclaw澶у璁叉巿C++緙栫▼璇劇▼錛岃屼笖浠栬幏寰椾簡Wroclaw澶у鐨勭悊璁虹墿鐞嗗鍗氬+瀛︿綅銆?/span> 榪欐槸浠栦負榪欐湰涔︾鐞嗙殑blog:http://www.relisoft.com/forums/index.php?s=ee4c0dc7cafef9f08c7c18a6e449b424&showforum=3錛屽敭鍚庢湇鍔¤繕涓嶉敊錛屽懙鍛碉紝浠ユ垜鐩墠鐨勬按騫崇湅璧鋒潵榪樻尯绱殑錛屾垜鎯蟲渶濂芥妸C++ Primer鍜宔ffective c++,more effective c++鐪嬪畬鍐嶇湅榪欐湰涔︿細姣旇緝濂斤紝涓嶈繃紜潃澶寸毊鐪嬩篃鏈夊ソ澶勶紝灝卞儚鏈夋椂鍊欐渚犲皬璇撮噷鐢ㄩ潪甯歌鏂規硶鎻愰珮淇負鏈夋椂鍊欎篃鑳借搗鍒版剰鎯充笉鍒扮殑鏁堟灉銆傝█褰掓浼狅紝鍦ㄨ繖鏈功涓嬈$敤鍒板搱甯岃〃錛屽緢澶氬湴鏂逛笉鏄庣櫧錛屾煡浜嗕功鏁寸悊涓涓嬨?br>   
    鏁e垪琛?hash table)鐨勫疄鐜板父縐頒負鏁e垪(hashing),鏁e垪鏄竴縐嶇敤浜庝互甯告暟騫沖潎鏃墮棿鎵ц鎻掑叆錛屽垹闄ゅ拰鏌ユ壘鐨勬妧鏈備絾鏄紝閭d簺闇瑕佸厓绱犻棿浠諱綍鎺掑簭淇℃伅鐨勬爲鎿嶄綔涓嶄細寰楀埌鏈夋晥鐨勬敮鎸併傚洜姝よ濡俧indMin,findMax浠ュ強鍦ㄧ嚎鎬ф椂闂村唴鎸夐『搴忔墦鍗版暣涓〃鐨勬搷浣滈兘鏄暎鍒楁墍涓嶆敮鎸佺殑銆?br>    鎴戜滑鎶婅〃鐨勫ぇ灝忚浣淭ableSize,鎴戜滑鎶婃瘡涓敭鏄犲皠鍒頒粠0鍒癟ableSize-1榪欎釜鑼冨洿涓殑鏌愪釜鏁幫紝騫朵笖灝嗗叾鏀懼埌閫傚綋鐨勫崟鍏冧腑銆傝繖涓槧灝勫氨縐頒負鏁e垪鍑芥暟(hash function),鐞嗘兂鎯呭喌涓嬪畠搴旇榪愮畻綆鍗曞茍涓斿簲璇ヤ繚璇佷換浣曚袱涓笉鍚岀殑閿槧灝勫埌涓嶅悓鐨勫崟鍏冦備笉榪囷紝榪欐槸涓嶅彲鑳界殑銆傚洜姝ゆ垜浠鎵句竴涓暎鍒楀嚱鏁幫紝璇ュ嚱鏁拌鍦ㄥ崟鍏冧箣闂村潎鍖鍒嗛厤閿傝繖灝辨槸鏁e垪鐨勫熀鏈濇兂錛屽墿涓嬬殑闂鍒欐槸瑕侀夋嫨涓涓嚱鏁幫紝鍐沖畾褰撲袱涓敭鏁e垪鍒板悓涓涓肩殑鏃跺?縐頒負(collision))搴旇鍋氫粈涔堜互鍙婂浣曠‘瀹氭暎鍒楄〃鐨勫ぇ灝忋?br>
1.鏁e垪鍑芥暟
    濡傛灉杈撳叆鐨勯敭鏄暣鏁幫紝涓鑸悎鐞嗙殑鏂規硶灝辨槸鐩存帴榪斿洖"Key mod Tablesize",浣咾ey鍏鋒湁鏌愪簺涓嶇悊鎯崇殑鎬ц川錛屾瘮濡傝嫢琛ㄧ殑澶у皬鏄?0鑰岄敭鐨勫悇浣嶉兘鏄?銆傚垯姝ゆ椂涓婅堪鏍囧噯鐨勬暎鍒楀嚱鏁板氨涓嶆槸涓涓ソ鐨勯夋嫨錛屽ソ鐨勫姙娉曢氬父鏄繚璇佽〃鐨勫ぇ灝忔槸绱犳暟錛屽綋杈撳叆鐨勯敭鏄殢鏈烘暣鏁版椂錛屾暎鍒楀嚱鏁頒笉浠呰繍綆楃畝鍗曡屼笖閿殑鍒嗛厤涔熷緢鍧囧寑銆?br>    閫氬父錛岄敭鏄瓧絎︿覆錛涘湪榪欑鎯呭艦涓嬶紝鏁e垪鍑芥暟闇瑕佷粩緇嗛夋嫨銆?br>    涓縐嶉夋嫨鏂規硶鏄妸瀛楃涓蹭腑瀛楃鐨凙SCII鐮佸煎姞璧鋒潵錛屼笅闈㈢殑渚嬬▼瀹炵幇浜嗚繖縐嶇瓥鐣ャ?br>   

1int hash( const string &key, int tableSize )
2{
3    int hashVal = 0;
4    forint i=0; i<key.length(); i++ )
5        hashVal += key[i];
6    return hashVal % tableSize;
7}

    涓婅堪鏁e垪鍑芥暟瀹炵幇璧鋒潵綆鍗曡屼笖鑳藉寰堝揩鍦扮畻鍑虹瓟妗堛備笉榪囧鏋滆〃寰堝ぇ錛屽垯鍑芥暟灝變笉浼氬緢濂藉湴鍒嗛厤閿備緥濡傦紝璁綯ableSize=10007(10007鏄礌鏁?錛屽茍璁炬墍鏈夌殑閿嚦澶?涓瓧絎﹂暱錛岀敱浜嶢SCII瀛楃鐨勫兼渶澶氭槸127錛屽洜姝ゆ暎鍒楀嚱鏁板彧鑳藉湪0-1016涔嬮棿鍙栧鹼紝鏄劇劧榪欎笉鏄竴縐嶅潎鍖鐨勫垎閰嶃?br>    鍙︿竴涓暎鍒楀嚱鏁板涓嬭〃紺猴紝榪欎釜鏁e垪鍑芥暟鍋囪Key鑷沖皯涓変釜瀛楃銆傚?7琛ㄧず鑻辨枃瀛楁瘝琛ㄧ殑瀛楁瘝涓暟澶栧姞涓涓┖鏍鹼紝鑰?29鏄?7×27錛岃鍑芥暟鍙冨療鍓嶄笁涓瓧絎︼紝浣嗘槸濡傛灉瀹冧滑鏄殢鏈虹殑錛岃岃〃鐨勫ぇ灝忚繕鏄?0007錛岄偅涔堟垜浠氨浼氬緱鍒頒竴涓悎鐞嗙殑鍧囪 鍒嗗竷銆傚彲鏄紝鑻辨枃涓嶆槸闅忔満鐨勩傝櫧鐒?涓瓧絎︼紙蹇界暐絀烘牸錛夋湁26×26×26=17576縐嶅彲鑳界殑緇勫悎錛屼絾鏌ラ獙璇嶆眹閲忚凍澶熷ぇ鐨勮仈鏈鴻瘝鍏稿嵈鎻ず鍑猴紝3涓瓧姣嶇殑涓嶅悓緇勫悎鏁板疄闄呬笂鍙湁2851銆傚嵆浣胯繖浜涚粍鍚堟病鏈夊啿紿侊紝涔熶笉榪囧彧鏈夎〃鐨?8%琚湡姝f暎鍒楀埌銆傚洜姝わ紝铏界劧寰堝鏄撹綆楋紝浣嗘槸褰撴暎鍒楄〃瓚沖澶х殑鏃跺欒繖涓嚱鏁拌繕鏄笉鍚堥傜殑銆?br>

1int hash( const string &key, int tableSize )
2{
3    return (key[0]+27*key[1]+729*key[2]) % tableSize
4}


    涓嬮潰鐨勪緥紼嬪垪鍑轟簡絎?縐嶅皾璇曘傝繖涓暎鍒楀嚱鏁版秹鍙婇敭涓殑鎵鏈夊瓧絎︼紝騫朵笖涓鑸彲浠ュ垎甯冨緱寰堝ソ錛岀▼搴忔牴鎹瓾orner娉曞垯璁$畻涓涓?7鐨勫欏瑰紡鍑芥暟銆傝繖涓暎鍒楀嚱鏁板埄鐢ㄤ簡鍏佽婧㈠嚭榪欎釜浜嬪疄銆傝繖鍙兘浼氬紩榪涜礋鏁幫紝鍥犳鍦ㄦ湯灝炬湁闄勫姞鐨勬祴璇曪紝榪欎釜鏁e垪鍑芥暟灝辮〃鐨勫垎甯冭岃█鏈繀鏄渶濂界殑錛屼絾鏄‘瀹炲叿鏈夋瀬鍏剁畝鍗曠殑浼樼偣鑰屼笖閫熷害涔熷緢蹇傚鏋滈敭鐗瑰埆闀匡紝閭d箞璇ユ暎鍒楀嚱鏁拌綆楄搗鏉ュ皢浼氳姳璐硅繃澶氱殑鏃墮棿銆傚湪榪欑鎯呭喌涓嬮氬父鍋氭硶鏄笉浣跨敤鎵鏈夌殑瀛楃銆傛鏃墮敭鐨勯暱搴﹀拰鎬ц川灝嗗獎鍝嶉夋嫨銆備緥濡傦紝閿彲鑳芥槸瀹屾暣鐨勮閬撳湴鍧錛屾暎鍒楀嚱鏁板彲浠ュ寘鎷閬撳湴鍧鐨勫嚑涓瓧絎︼紝鎴栬涔熷寘鎷煄甯傚悕鍜岄偖鏀跨紪鐮佺殑鍑犱釜瀛楃銆傛湁浜涚▼搴忚璁′漢鍛橀氳繃鍙嬌鐢ㄥ鏁頒綅緗笂鐨勫瓧絎︽潵瀹炵幇浠栦滑鐨勬暎鍒楀嚱鏁幫紝榪欓噷鏈夎繖涔堜竴灞傛兂娉曪細鐢ㄨ綆楁暎鍒楀嚱鏁拌妭鐪佷笅鐨勬椂闂存潵琛ュ伩鐢辨浜х敓鐨勫鍧囧寑鍒嗗竷鐨勫嚱鏁扮殑杞誨井騫叉壈銆?br>

 1int hash( const string &key, int tableSize )
 2{
 3    int hashVal = 0;
 4    for(int i=0;i<key.length();i++)
 5        hashVal = 37 * hashVal + key[i];
 6    hashVal %= tableSize;
 7    if( hashVal <0 )
 8        hashVal += tableSize;
 9    return hashVal;
10}

    鍓╀笅鐨勪富瑕佺紪紼嬬粏鑺傛槸瑙e喅鍐茬獊銆傚鏋滃綋涓涓厓绱犲湪鎻掑叆鏃朵笌涓涓凡緇忔彃鍏ョ殑鍏冪礌鏁e垪鍒扮浉鍚岀殑鍊鹼紝閭d箞灝變駭鐢熶竴涓啿紿侊紝榪欎釜鍐茬獊闇瑕佹秷闄ゃ?br>


2.鍒嗙閾炬帴娉?br>    瑙e喅鍐茬獊鐨勭涓縐嶆柟娉曢氬父縐頒負鍒嗙閾炬帴娉?separate chaining),鍏跺仛娉曟槸灝嗘暎鍒楀埌鍚屼竴涓肩殑鎵鏈夊厓绱犱繚鐣欏埌涓涓摼琛ㄤ腑錛屽彲浠ヤ嬌鐢ㄦ爣鍑嗗簱涓〃鐨勫疄鐜版柟娉曘傚鏋滅┖闂村緢绱э紝鍒欐洿鍙彇鐨勬柟娉曟槸閬垮厤浣跨敤瀹冧滑(鍥犱負榪欎簺琛ㄦ槸鍙屽悜閾捐〃錛屾氮璐圭┖闂?,涓烘墽琛宻earch,鎴戜滑浣跨敤鏁e垪鍑芥暟鏉ョ‘瀹氱┒绔熻閬嶅巻閭d釜閾捐〃錛岀劧鍚庢煡鎵劇浉搴旂殑琛ㄣ備負鎵цinsert錛屾垜浠鏌ョ浉搴旂殑琛ㄦ潵紜畾鏄惁璇ュ厓绱犲凡緇忓湪琛ㄤ腑浜?濡傛灉瑕佹彃鍏ラ噸澶嶅厓錛岄偅涔堥氬父瑕佺暀鍑轟竴涓澶栫殑鏁版嵁鎴愬憳錛屽綋鍑虹幇鍖歸厤浜嬩歡鏃惰繖涓暟鎹垚鍛樺1),濡傛灉榪欎釜鍏冪礌鏄釜鏂扮殑鍏冪礌錛岄偅涔堝畠灝嗚鎻掑叆鍒拌〃鐨勫墠绔紝榪欎笉浠呭洜涓烘柟渚匡紝鑰屼笖榪樺洜涓烘渶鍚庢彃鍏ョ殑鍏冪礌鏈鏈夊彲鑳戒笉涔呭啀嬈¤璁塊棶錛屽疄鐜板垎紱婚摼鎺ユ硶鎵闇瑕佺殑綾繪灦鏋勫湪涓嬮潰鐨勪緥紼嬩腑緇欏嚭銆傛暎鍒楄〃緇撴瀯瀛樺偍涓涓摼琛ㄦ暟緇勶紝榪欎釜鏁扮粍鍦ㄦ瀯閫犲嚱鏁頒腑鎸囧畾銆?br>

 1//鍒嗙閾炬帴鏁e垪琛ㄧ殑綾繪瀯鏋?/span>
 2template <typename HashedObj>
 3  class HashTable
 4 {
 5public:
 6    explicit HashTable( int size = 101 );
 7
 8    bool contains( const HashedObj &x ) const;
 9
10   void makeEmpty();
11   void insert( const HashedObj x);
12   void remove( const HashedObj x);
13
14 private:
15    vector<list<HashedObj> > theLists;// >>鏄痗++鐨勪竴涓繍綆楃錛岃屼笖姣?gt;闀匡紝鍥犳涓や釜>涔嬮棿闇瑕佷竴涓┖鏍?br>16    int currentSize;
17    
18    void rehash()
19    int myhash( const HashedObj &x ) const;
20};
21
22int hash( const string &key );
23int hash( int key );
24
25    

    榪欓噷涓嶄嬌鐢ㄩ偅浜涘皢瀵硅薄鍜岀被鐨勫ぇ灝忎綔涓哄弬鏁扮殑鏁e垪鍑芥暟錛岃屾槸浣跨敤閭d簺浠呬互瀵硅薄涓哄弬鏁扮殑鏁e垪鍑芥暟錛屽茍涓旇繑鍥瀒nt銆傛暎鍒楄〃綾繪湁涓涓鏈夌殑鎴愬憳鍑芥暟myhash,榪欎釜鍑芥暟灝嗙粨鏋滃垎閰嶅埌涓涓悎閫傜殑鏁扮粍绱㈠紩涓?/p>

 1int myhash( const HashedObj &x ) const
 2{
 3    int hashVal = hash(x);
 4    hashVal %=theLists.size();
 5    if( hashVal < 0)
 6        hashVal += theLists.size();
 7    return hashVal;
 8}

 9     
10

     涓嬮潰鐨勪緥紼嬩腑鍒楀嚭浜嗕竴涓彲浠ュ瓨鍌ㄥ湪涓鑸暎鍒楄〃涓殑Employee綾伙紝璇ョ被浣跨敤name鎴愬憳浣滀負閿紝Employee綾婚氳繃鎻愪緵鐩哥瓑鎬ф搷浣滅鍜屼竴涓暎鍒楀嚱鏁版潵瀹炵幇HashedObj鐨勯渶姹傘?br>

 1class Employee
 2{
 3public:
 4    const string & getname() const
 5        return name; }
 6    bool operator==const Employee &rhs )  const
 7        return getName() == rhs.getName(); }
 8    bool operator!=const Employee & rhs }
 const
 9        return !(*this == rhs); }
10
11private:
12    string name;
13    double salary;
14    int seniority;
15};
16
17int hash( const Employ &item )
18{
19    return hash( item.getName() );
20}

    瀹炵幇makeEmpty,contains鍜宺emove鐨勭▼搴忎唬鐮佸涓?br>

 1void makeEmpty()
 2 {
 3    forint i=0; i<theLists.size();i++ )
 4        theLists[i].clear();
 5}

 6
 7bool contains( const HashedObj &x ) const
 8{
 9    const list<HashedObj> & whichList = theLists[myhash(x)];
10    return find( whichList.begin(),whichList.end(),x) !=whichList.end();
11}

12
13bool remove( const HashedObj &x )
14{
15    list<HashedObj> &whichList = theLists[myhash(x)];
16    list<HashedObj>::iterator itr = find(whichList.begin(),whichList.end(),x);
17    if( itr == whichList.end() )
18        return false;
19    whichList.erase( itr );
20    --currentSize;
21    return true;
22}

    涓嬩竴涓搷浣滄槸鎻掑叆渚嬬▼銆傚鏋滆鎻掑叆鐨勯」宸茬粡瀛樺湪錛岄偅涔堜粈涔堥兘涓嶅仛錛涘惁鍒欏皢鍏舵斁鑷寵〃鐨勫墠绔傝鍏冪礌鍙互鏀懼湪琛ㄧ殑浠諱綍鍦版柟錛涙澶勪嬌鐢╬ush_back鏄渶鏂逛究鐨勩倃hichList鏄竴涓紩鐢ㄥ彉閲?br>

 1bool insert ( const HashedObj &x )
 2{
 3    list<HashedObj> & whichList = theLists[ myhash(x) ];
 4    if( find( whichList.begin(),whichList.end(),x )!=whichList.end() )
 5        return false;
 6    whichList.push_back(x);
 7    
 8    if(++currentSize > theLists.size() )
 9        rehash();
10
11    return true;
12}



 



]]>
榪欐湰涔?/title><link>http://m.shnenglu.com/xiaoluoluo/archive/2009/11/25/101919.html</link><dc:creator>灝忕綏緗?/dc:creator><author>灝忕綏緗?/author><pubDate>Wed, 25 Nov 2009 10:43:00 GMT</pubDate><guid>http://m.shnenglu.com/xiaoluoluo/archive/2009/11/25/101919.html</guid><wfw:comment>http://m.shnenglu.com/xiaoluoluo/comments/101919.html</wfw:comment><comments>http://m.shnenglu.com/xiaoluoluo/archive/2009/11/25/101919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/xiaoluoluo/comments/commentRss/101919.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/xiaoluoluo/services/trackbacks/101919.html</trackback:ping><description><![CDATA[<span style="COLOR: #999999; FONT-FAMILY: 妤蜂綋_GB2312">鎽樿嚜闃塊儙鐨勩婅繖鏈功銆?/span><br>    <br><span style="FONT-SIZE: 12pt; COLOR: #808080; FONT-FAMILY: 妤蜂綋_GB2312">1.  寮濮嬪彉寰楁垚鐔熸槸鍦ㄦ渶鐥涜嫤鐨勬椂鍊欐墠鎹㈠埌鐨?br><br>    鎯寵榪芥眰姊︽兂鏄湪鏈絀鴻櫄鐨勬椂鍊欐墠鍐沖畾鐨?br>  <br>    鐫¤繃鏈鑸掓湇鐨勮鏄湪寰堢瘡鐨勬椂鍊欐墠鍙戠幇鐨?br>   <br>    寰楄繃鏈鐝嶈吹鐨勪笢瑗挎槸鍦ㄥけ鍘葷殑鏃跺欐墠鐭ラ亾鐨?br><br>2   鎯沖康涓涓漢鐨勬椂鍊?璺濈鎴愪簡涓縐嶆俯鏌?br><br>    紱誨紑涓涓漢鐨勬椂鍊?璺濈鎴愪簡涓縐嶅熷彛<br><br>    瀹蟲曚竴涓漢鐨勬椂鍊?蹇冩儏鎴愪簡涓縐嶅瘋瀵?br><br>    鎯寵涓涓漢鐨勬椂鍊?瀵傚癁鎴愪簡涓縐嶄韓鍙?br><br>3   榪欎釜鏃朵唬 鎴垮瓙寤哄緱鍐嶅ぇ<br><br>    涔熻涓嶄笅閭d簺鎯蟲祦嫻殑蹇?br><br>    榪欎釜鏃朵唬 鎴垮瓙鐩栧緱鍐嶅皬<br><br>    涔熷寰椾笅閭d簺鎯沖畨瀹氱殑浜?br></span> <img src ="http://m.shnenglu.com/xiaoluoluo/aggbug/101919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/xiaoluoluo/" target="_blank">灝忕綏緗?/a> 2009-11-25 18:43 <a href="http://m.shnenglu.com/xiaoluoluo/archive/2009/11/25/101919.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://www-188445.com" target="_blank">激情小说另类小说亚洲欧美 </a>| <a href="http://1332233.com" target="_blank">亚洲一区二区三区中文字幕在线</a>| <a href="http://seanzhau.com" target="_blank">亚洲黄色有码视频</a>| <a href="http://devwang.com" target="_blank">极品尤物av久久免费看</a>| <a href="http://yishangsh.com" target="_blank">激情综合视频</a>| <a href="http://mide776.com" target="_blank">国产精品狼人久久影院观看方式</a>| <a href="http://72nnnn.com" target="_blank">亚洲激情在线激情</a>| <a href="http://173881.com" target="_blank">亚洲欧美日本另类</a>| <a href="http://nbpacking.com" target="_blank">一区二区三区产品免费精品久久75</a>| <a href="http://32tun.com" target="_blank">国产日韩欧美高清免费</a>| <a href="http://www-8438.com" target="_blank">狠狠色丁香婷婷综合</a>| <a href="http://22127c.com" target="_blank">激情成人av</a>| <a href="http://gffffg.com" target="_blank">国产一区二区久久</a>| <a href="http://fuwu56.com" target="_blank">国产欧美一区二区三区久久人妖</a>| <a href="http://www57669.com" target="_blank">亚洲欧美日韩另类</a>| <a href="http://k37b.com" target="_blank">欧美在线高清</a>| <a href="http://shanghaijiagu.com" target="_blank">国产亚洲精品成人av久久ww</a>| <a href="http://guanghezixun.com" target="_blank">国产日韩精品久久久</a>| <a href="http://gbandal.com" target="_blank">国产精品一区二区女厕厕</a>| <a href="http://62san.com" target="_blank">欧美在线视频一区二区</a>| <a href="http://820002.com" target="_blank">亚洲精选在线观看</a>| <a href="http://340996.com" target="_blank">一区二区不卡在线视频 午夜欧美不卡'</a>| <a href="http://xunlei520.com" target="_blank">久久精品免视看</a>| <a href="http://samucorvin.com" target="_blank">国产农村妇女毛片精品久久莱园子</a>| <a href="http://6hzl8.com" target="_blank">国产精品久久久久久久午夜片</a>| <a href="http://free18teen.com" target="_blank">国产午夜精品久久</a>| <a href="http://by4672.com" target="_blank">亚洲高清不卡</a>| <a href="http://x946.com" target="_blank">亚洲欧美日本视频在线观看</a>| <a href="http://ddnwater.com" target="_blank">一区二区三区高清不卡</a>| <a href="http://9906w.com" target="_blank">最新亚洲一区</a>| <a href="http://submro.com" target="_blank">久久久久久亚洲精品中文字幕</a>| <a href="http://aqdit2022.com" target="_blank">国产主播一区二区三区</a>| <a href="http://9ctv2.com" target="_blank">亚洲黄网站黄</a>| <a href="http://wwwcao88.com" target="_blank">好吊一区二区三区</a>| <a href="http://jx963.com" target="_blank">亚洲日韩第九十九页</a>| <a href="http://jizzizz.com" target="_blank">午夜精品一区二区三区在线播放</a>| <a href="http://maomi54.com" target="_blank">久久综合狠狠综合久久综青草</a>| <a href="http://4448884.com" target="_blank">欧美一二区视频</a>| <a href="http://www-800778.com" target="_blank">快射av在线播放一区</a>| <a href="http://www-293456.com" target="_blank">欧美一区二区私人影院日本 </a>| <a href="http://855821.com" target="_blank">欧美性猛交视频</a>| <a href="http://cancerrxa.com" target="_blank">久久免费偷拍视频</a>| <a href="http://0755hqr.com" target="_blank">亚洲无限乱码一二三四麻</a>| <a href="http://a718sx.com" target="_blank">久久九九精品</a>| <a href="http://chufengguanye.com" target="_blank">亚洲欧洲一区二区在线观看</a>| <a href="http://www36633.com" target="_blank">亚洲欧美综合</a>| <a href="http://yzstbjt.com" target="_blank">欧美日韩综合在线免费观看</a>| <a href="http://tigerpowerinc.com" target="_blank">亚洲福利国产</a>| <a href="http://9928k.com" target="_blank">久久米奇亚洲</a>| <a href="http://395493.com" target="_blank">午夜欧美大片免费观看</a>| <a href="http://686852a.com" target="_blank">国产精品xxxav免费视频</a>| <a href="http://by21999.com" target="_blank">亚洲精品免费一二三区</a>| <a href="http://maokk77.com" target="_blank">猛男gaygay欧美视频</a>| <a href="http://wwwgay456.com" target="_blank">亚洲影院免费观看</a>| <a href="http://555415.com" target="_blank">欧美日韩国产综合视频在线</a>| <a href="http://y3u7.com" target="_blank">亚洲国产精品视频</a>| <a href="http://bocai4488.com" target="_blank">久久网站免费</a>| <a href="http://myav2.com" target="_blank">欧美中文日韩</a>| <a href="http://tigerpowerinc.com" target="_blank">国产色婷婷国产综合在线理论片a</a>| <a href="http://www62265.com" target="_blank">亚洲一区二区三区视频播放</a>| <a href="http://senlin86.com" target="_blank">亚洲激情视频网</a>| <a href="http://ww3838.com" target="_blank">你懂的视频欧美</a>| <a href="http://236664.com" target="_blank">亚洲国产综合视频在线观看</a>| <a href="http://szsywine.com" target="_blank">美日韩免费视频</a>| <a href="http://lampreydb.com" target="_blank">蜜桃伊人久久</a>| <a href="http://788997.com" target="_blank">亚洲免费观看在线观看</a>| <a href="http://987328.com" target="_blank">最新国产成人在线观看</a>| <a href="http://sdmsjd.com" target="_blank">欧美不卡视频</a>| <a href="http://aa56789.com" target="_blank">一区二区三区不卡视频在线观看</a>| <a href="http://667939.com" target="_blank">日韩亚洲在线观看</a>| <a href="http://mm77gg.com" target="_blank">国产精品福利网站</a>| <a href="http://www308eee.com" target="_blank">亚洲欧美综合v</a>| <a href="http://5cok.com" target="_blank">亚洲无吗在线</a>| <a href="http://btbt7086.com" target="_blank">黄色日韩网站视频</a>| <a href="http://340332.com" target="_blank">欧美成人小视频</a>| <a href="http://www433444.com" target="_blank">狂野欧美激情性xxxx欧美</a>| <a href="http://www-222304.com" target="_blank">亚洲第一精品夜夜躁人人爽</a>| <a href="http://k82net.com" target="_blank">欧美激情aⅴ一区二区三区</a>| <a href="http://278538.com" target="_blank">欧美国产精品va在线观看</a>| <a href="http://ae262.com" target="_blank">一区二区毛片</a>| <a href="http://myasker.com" target="_blank">午夜精品福利在线</a>| <a href="http://wwwmiya118.com" target="_blank">欧美成年人视频</a>| <a href="http://281191.com" target="_blank">亚洲大胆女人</a>| <a href="http://chenyirong.com" target="_blank">欧美黑人在线观看</a>| <a href="http://y08877.com" target="_blank">在线视频日本亚洲性</a>| <a href="http://zj-jufeng.com" target="_blank">亚洲视频免费看</a>| <a href="http://yw9677.com" target="_blank">国产曰批免费观看久久久</a>| <a href="http://hh474.com" target="_blank">欧美高清视频在线观看</a>| <a href="http://ycpeixun.com" target="_blank">欧美日韩国产在线</a>| <a href="http://haochen072.com" target="_blank">欧美影院午夜播放</a>| <a href="http://qq6699.com" target="_blank">米奇777超碰欧美日韩亚洲</a>| <a href="http://nachang5117.com" target="_blank">亚洲毛片在线看</a>| <a href="http://lorgou.com" target="_blank">亚洲一区国产</a>| <a href="http://xxx444vip.com" target="_blank">国产精品女人毛片</a>| <a href="http://kaijiepharm.com" target="_blank">在线中文字幕一区</a>| <a href="http://tigerpowerinc.com" target="_blank">亚洲国产一区二区精品专区</a>| <a href="http://di4see.com" target="_blank">亚洲欧美久久久久一区二区三区</a>| <a href="http://smiczbb.com" target="_blank">激情av一区</a>| <a href="http://zd-jm.com" target="_blank">一区二区三区日韩精品</a>| <a href="http://bkf23.com" target="_blank">狠色狠色综合久久</a>| <a href="http://www-662553.com" target="_blank">久久一区二区三区国产精品</a>| <a href="http://by5263.com" target="_blank">午夜免费电影一区在线观看</a>| <a href="http://xaxkizlar.com" target="_blank">亚洲精品资源美女情侣酒店</a>| <a href="http://aidingcai.com" target="_blank">影音先锋日韩有码</a>| <a href="http://xindefalv.com" target="_blank">国产精品久久久久久久浪潮网站</a>| <a href="http://szywsj.com" target="_blank">一区二区高清视频在线观看</a>| <a href="http://7555hh.com" target="_blank">亚洲免费视频网站</a>| <a href="http://5474hu.com" target="_blank">亚洲四色影视在线观看</a>| <a href="http://kan0577.com" target="_blank">美女免费视频一区</a>| <a href="http://aa224.com" target="_blank">亚洲作爱视频</a>| <a href="http://017455.com" target="_blank">黄色欧美成人</a>| <a href="http://151545.com" target="_blank">欧美老女人xx</a>| <a href="http://jdss777.com" target="_blank">亚洲第一视频</a>| <a href="http://ss2ssc.com" target="_blank">久久精品欧美</a>| <a href="http://www-90567.com" target="_blank">久久久久高清</a>| <a href="http://987gqb.com" target="_blank">伊人狠狠色j香婷婷综合</a>| <a href="http://ssss96.com" target="_blank">国产精品亚洲综合久久</a>| <a href="http://jdavmm.com" target="_blank">一本大道久久精品懂色aⅴ</a>| <a href="http://337105.com" target="_blank">免费视频久久</a>| <a href="http://05078888.com" target="_blank">国产伦精品一区二区三区免费迷 </a>| <a href="http://4430x.com" target="_blank">亚洲性夜色噜噜噜7777</a>| <a href="http://95gun.com" target="_blank">欧美日本二区</a>| <a href="http://9273829.com" target="_blank">好吊妞这里只有精品</a>| <a href="http://51120guahao.com" target="_blank">亚洲一区中文</a>| <a href="http://66666556.com" target="_blank">久久免费99精品久久久久久</a>| <a href="http://avtt59999.com" target="_blank">狼狼综合久久久久综合网</a>| <a href="http://5254f.com" target="_blank">国产亚洲精品成人av久久ww</a>| <a href="http://bbbbyb.com" target="_blank">亚洲激情国产</a>| <a href="http://8xv0.com" target="_blank">欧美大色视频</a>| <a href="http://aotaotao.com" target="_blank">久久人人精品</a>| <a href="http://oksousou.com" target="_blank">亚洲激情欧美激情</a>| <a href="http://www-452.com" target="_blank">欧美xxxx在线观看</a>| <a href="http://5xxm.com" target="_blank">欧美精品成人在线</a>| <a href="http://9uu91.com" target="_blank">久久精品成人欧美大片古装</a>| <a href="http://y87b.com" target="_blank">久久―日本道色综合久久</a>| <a href="http://lyminghang.com" target="_blank">久久精品免费电影</a>| <a href="http://kk1xx-com.com" target="_blank">欧美亚洲自偷自偷</a>| <a href="http://5yy6.com" target="_blank">午夜精品免费</a>| <a href="http://spardec.com" target="_blank">亚洲视频中文字幕</a>| <a href="http://yy6024.com" target="_blank">国产精品毛片</a>| <a href="http://xiaoyaer.com" target="_blank">在线免费观看视频一区</a>| <a href="http://605799.com" target="_blank">国产主播喷水一区二区</a>| <a href="http://4438x28.com" target="_blank">99热免费精品</a>| <a href="http://wwww20.com" target="_blank">亚洲图片欧美日产</a>| <a href="http://sdjzzs.com" target="_blank">在线观看日韩www视频免费</a>| <a href="http://maomi998.com" target="_blank">国内成人在线</a>| <a href="http://www8888803.com" target="_blank">国产视频一区在线</a>| <a href="http://057232.com" target="_blank">激情亚洲成人</a>| <a href="http://rezel-zj.com" target="_blank">av不卡在线观看</a>| <a href="http://725443.com" target="_blank">欧美1区2区</a>| <a href="http://zhongqingshiye.com" target="_blank">亚洲精品综合精品自拍</a>| <a href="http://icciran.com" target="_blank">aa亚洲婷婷</a>| <a href="http://www-485050.com" target="_blank">亚洲一区日韩</a>| <a href="http://874805.com" target="_blank">国产亚洲一区二区精品</a>| <a href="http://dddd30.com" target="_blank">欧美成人中文字幕</a>| <a href="http://by3259.com" target="_blank">亚洲综合二区</a>| <a href="http://www789yys.com" target="_blank">欧美美女视频</a>| <a href="http://ddnwater.com" target="_blank">夜夜夜久久久</a>| <a href="http://heyzo1199.com" target="_blank">亚洲人成久久</a>| <a href="http://278538.com" target="_blank">蜜桃久久精品乱码一区二区</a>| <a href="http://3188m.com" target="_blank">红桃视频成人</a>| <a href="http://cnchtx.com" target="_blank">999亚洲国产精</a>| <a href="http://5110010.com" target="_blank">久久婷婷国产综合国色天香</a>| <a href="http://gzzhuangshi.com" target="_blank">精品福利av</a>| <a href="http://www-119049.com" target="_blank">亚洲视频免费在线</a>| <a href="http://wwwok1965.com" target="_blank">国产欧美91</a>| <a href="http://jav1111.com" target="_blank">久久国产精品久久精品国产 </a>| <a href="http://322033.com" target="_blank">免费成年人欧美视频</a>| <a href="http://xunlei520.com" target="_blank">国产视频精品xxxx</a>| <a href="http://2061856.com" target="_blank">亚洲小说春色综合另类电影</a>| <a href="http://337791.com" target="_blank">欧美视频中文字幕</a>| <a href="http://8xyxs1.com" target="_blank">亚洲日韩第九十九页</a>| <a href="http://4446666.com" target="_blank">一本色道久久综合亚洲精品婷婷</a>| <a href="http://7269003.com" target="_blank">欧美日韩综合在线</a>| <a href="http://72avav.com" target="_blank">久久大综合网</a>| <a href="http://yiqipapa8.com" target="_blank">亚洲激情女人</a>| <a href="http://3315588.com" target="_blank">欧美一区二区三区喷汁尤物</a>| <a href="http://8x1080x.com" target="_blank">国产伊人精品</a>| <a href="http://shruhan.com" target="_blank">欧美日韩在线视频一区二区</a>| <a href="http://er65.com" target="_blank">久久黄色影院</a>| <a href="http://9931111.com" target="_blank">日韩一二三区视频</a>| <a href="http://wwwen41.com" target="_blank">另类春色校园亚洲</a>| <a href="http://26mmmm.com" target="_blank">宅男精品视频</a>| <a href="http://hehextv.com" target="_blank">激情校园亚洲</a>| <a href="http://ridenimbus.com" target="_blank">欧美日韩中文在线观看</a>| <a href="http://895658.com" target="_blank">久久久久九九九</a>| <a href="http://goutoujunshi.com" target="_blank">亚洲精品久久久久久久久久久久</a>| <a href="http://syntheticnets.com" target="_blank">欧美亚洲视频</a>| <a href="http://917729.com" target="_blank">99国产精品99久久久久久粉嫩</a>| <a href="http://710191.com" target="_blank">国产一区二区三区高清</a>| <a href="http://azaz7.com" target="_blank">欧美肥婆在线</a>| <a href="http://www30bxbx.com" target="_blank">久久精品成人欧美大片古装</a>| <a href="http://dzyhjx.com" target="_blank">日韩亚洲视频在线</a>| <a href="http://www-132377.com" target="_blank">欧美黄色日本</a>| <a href="http://828121.com" target="_blank">久久夜色精品亚洲噜噜国产mv</a>| <a href="http://0999555.com" target="_blank">夜夜嗨一区二区</a>| <a href="http://0061366.com" target="_blank">亚洲国产一区二区三区高清</a>| <a href="http://m10669.com" target="_blank">国产伦精品一区二区三区在线观看 </a>| <a href="http://coerverbeijing.com" target="_blank">蜜桃av综合</a>| <a href="http://www11111111.com" target="_blank">欧美在线亚洲</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>