锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产免费福利体检区久久,欧美日韩精品久久久久,国内精品久久久久影院亚洲http://www.shnenglu.com/flyinghearts/category/14248.htmlzh-cnSun, 15 Jun 2014 08:04:46 GMTSun, 15 Jun 2014 08:04:46 GMT60SEH寮傚父澶勭悊涓撳埄鍒版湡浜?/title><link>http://www.shnenglu.com/flyinghearts/archive/2014/06/15/207288.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Sun, 15 Jun 2014 02:55:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2014/06/15/207288.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/207288.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2014/06/15/207288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/207288.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/207288.html</trackback:ping><description><![CDATA[<div>銆銆<br />銆銆Borland鐨勯偅涓伓蹇冪殑SEH寮傚父澶勭悊涓撳埄錛圢o:5,628,016  Filed: June, 15, 1997錛夛紝緇堜簬鍒版湡浜嗐傚笇鏈汫CC/CLANG鑳藉揩鐐瑰畬鎴恮in32鐨凜++寮傚父鐨凷EH瀹炵幇錛屼笅涓鐗堟湰鐨凣CC錛岃兘璁╃敤鎴蜂笉鍐嶇籂緇揝JLJ錛孌warf2鐨勯夋嫨銆?br /><br /></div><img src ="http://www.shnenglu.com/flyinghearts/aggbug/207288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2014-06-15 10:55 <a href="http://www.shnenglu.com/flyinghearts/archive/2014/06/15/207288.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>mingw gcc鐨勫ご鏂囦歡瀛樺湪緇撴瀯瀹氫箟閿欒錛侊紒http://www.shnenglu.com/flyinghearts/archive/2013/03/21/198694.htmlflyingheartsflyingheartsThu, 21 Mar 2013 13:51:00 GMThttp://www.shnenglu.com/flyinghearts/archive/2013/03/21/198694.htmlhttp://www.shnenglu.com/flyinghearts/comments/198694.htmlhttp://www.shnenglu.com/flyinghearts/archive/2013/03/21/198694.html#Feedback0http://www.shnenglu.com/flyinghearts/comments/commentRss/198694.htmlhttp://www.shnenglu.com/flyinghearts/services/trackbacks/198694.html鍑嗙‘鐨勮鏄痬ingw鎵鐢ㄧ殑sdk ——  w32api錛屽瓨鍦ㄧ粨鏋勫畾涔夐敊璇?br /> 
 鎵撳紑wingdi.h 瀹氫綅鍒?tagGCP_RESULTSW 鐨勭粨鏋勫畾涔変綅緗紝
 
  typedef struct tagGCP_RESULTSW {
    DWORD lStructSize;
    LPWSTR lpOutString;
    UINT *lpOrder;
    int *lpDx;
    int *lpCaretPos;
    LPWSTR lpClass;         //姝g‘鐨勭被鍨嬪簲璇ユ槸 LPSTR
    LPWSTR lpGlyphs;
    UINT nGlyphs;
    int nMaxFit;
  } GCP_RESULTSW,*LPGCP_RESULTSW;

 鏍規嵁msdn, lpClass鐨勭被鍨嬪簲璇ユ槸 LPSTR錛?w32api鍗村皢鍏跺0鏄庝負 LPWSTR銆?br /> 
  榪欎釜bug錛屽湪2011騫村氨鏈変漢鎶ュ憡浜嗭紝鎹cvs鐗堟湰涔熶慨姝d簡錛屼絾鏄洿鍒扮幇鍦紝瀹樻柟涓嬭澆榪樻槸2011騫村彂甯冪殑閭d釜鏈塨ug鐨勭増鏈紙w32api-3.17-2-mingw32-dev.tar.lzma錛夈?br /> 
  鍙﹀錛宮ingw-w64錛堟敮鎸佺敓鎴?2浣嶃?4浣嶇▼搴忥級涓嶅瓨鍦ㄨ繖涓棶棰樸?

 



]]>
c++11 鏈鍙嶇洿瑙夌殑鍦版柟http://www.shnenglu.com/flyinghearts/archive/2012/11/22/195570.htmlflyingheartsflyingheartsThu, 22 Nov 2012 11:49:00 GMThttp://www.shnenglu.com/flyinghearts/archive/2012/11/22/195570.htmlhttp://www.shnenglu.com/flyinghearts/comments/195570.htmlhttp://www.shnenglu.com/flyinghearts/archive/2012/11/22/195570.html#Feedback4http://www.shnenglu.com/flyinghearts/comments/commentRss/195570.htmlhttp://www.shnenglu.com/flyinghearts/services/trackbacks/195570.html
1 auto 浼氳嚜鍔ㄦ妸 寮曠敤 鍘婚櫎鎺?br /> 
  int& get();
  auto k = get();     // k鐨勭被鍨嬫槸int錛岃屼笉鏄痠nt&
 
  Derived object;
  auto&    same_object = (Base&)object;      
  auto  another_object = (Base&)object;  //浼氶噸鏂版瀯閫犱釜Base瀵硅薄  
 
    
2 decltype 鏈夋椂浼氳嚜鍔ㄦ妸 寮曠敤 鍔犱笂

  int x;
  decltype((x)) 鍜?decltype(*&x) 鐨勭被鍨嬫槸int&錛岃屼笉鏄痠nt
 
  鍦ㄥ畯涓嬌鐢╠ecltype鏃訛紝瑕佺壒鍒敞鎰忓埆澶氬姞浜嗘嫭鍙楓?br /> 
  涓嬮潰榪欐浠g爜閿欏湪鍝噷錛?br />    template<typename T, typename R>
    auto min(T t, R r) -> decltype(t < r ? t : r)
    {
      return (t < r ? t : r);
    }
    
  decltype(t < r ? t : r)鐨勭被鍨嬫槸T&鎴朢&錛岃屼笉鏄墍甯屾湜鐨凾鎴朢錛?br /> 
 
  鏍囧噯鏄繖鏍瘋瀹氱殑錛?br />
The type denoted by decltype(e) is defined as follows:
  — if e is an unparenthesized id-expression or an unparenthesized class member
     access (5.2.5), decltype(e) is the type of the entity named by e. If there
     is no such entity, or if e names a set of overloaded functions, the program
     is ill-formed;
  — otherwise, if e is an xvalue, decltype(e) is T&&, where T is the type of e;
  — otherwise, if e is an lvalue, decltype(e) is T&, where T is the type of e;
  — otherwise, decltype(e) is the type of e.
 

3 std::move銆乻td::forward銆佸彸鍊煎紩鐢?br /> 
  C++11 寮曞叆 鍙沖煎紩鐢紝鍙互鍋氬埌錛氬嚱鏁拌漿鍙戙侀拡瀵逛復鏃跺璞′紭鍖?br />  move鏄姩璇嶏紝浠庡瓧闈笂鐞嗚В濂藉儚鏄縐誨姩瀵硅薄錛屽叾瀹瀞td::move鍙槸綆鍗曠殑灝嗙被鍨嬭漿鎴愬彸鍊煎紩鐢ㄨ屽凡錛侊紒錛?鍙互鐞嗚В鎴?cast_to_rvalue_reference 鎴?treat_as_temporal_object銆?br /> 

  void test1(int&&) {}
 
  void test2(int&& value)  //娉ㄦ剰錛歷alue鐨勭被鍨嬫槸int錛岃屼笉鏄痠nt&&
  {
     test1(value);    //鏃犳硶緙栬瘧閫氳繃錛屽洜涓簐alue鐨勭被鍨嬫槸int錛?蹇呴』杞崲綾誨瀷
     test1(static_cast<int&&>(value));      //鎴栬?br />     test1(std::forward<int>(value));
  }
 
  test2鍑芥暟涓紝value鐨勭被鍨嬫槸int錛岃屼笉鏄痠nt&&銆?br />  榪欐槸涓涓笉寰楀凡鐨勯夋嫨銆傚鏋渧alue鐨勭被鍨嬫槸int&&鐨勮瘽錛屽氨浼氭湁鍓綔鐢細
 
  void increase(int& value) { ++value; }
  void test3(int&& value) { increase(value); }
 
  char ch = 'a';
  test3(ch);  //鏈剰鏄敼鍙榗h鍊鹼紝浣嗗疄闄呬笂ch鍊間笉浼氭敼鍙橈紝鏀瑰彉鐨勬槸涓存椂瀵瑰儚
  閫氳繃杞彂鍑芥暟test3錛宨ncrease鍑芥暟鍙互淇敼涓存椂瀵瑰儚錛?br />  榪欓犳垚紼嬪簭鍛樼姱鐨勯敊璇紙濡備笂闈㈢殑渚嬪瓙錛夛紝闅句互鍦ㄧ紪璇戞椂灝辮鎵懼嚭鏉ャ?br /> 
 
  std::forward<T>(value) 絳変環浜?static_cast<T&&>(value)錛屾劅瑙夊悗鑰呮洿瀹規槗鐞嗚В銆?br />  std::forward 璧峰埌鐨勮漿鍙戜綔鐢ㄣ傚鏋淭綾誨瀷涓?R&銆?R&&錛岀粡榪囩被鍨嬭漿鎹㈠悗錛屽叾綾誨瀷榪樻槸鍜屽師鏉ョ殑涓鏍楓?br />  鍦–++11涓?
    R&  &   絳夊悓浜?R&   錛堝湪c++03涓紝R& &榪欑鍐欐硶鏄潪娉曠殑錛?br />    R&& &   絳夊悓浜?R&
    R&  &&  絳夊悓浜?R&
    R&& &&  絳夊悓浜?R&&
 

]]>
decltype鐨勫皬鈥滈櫡闃扁?/title><link>http://www.shnenglu.com/flyinghearts/archive/2012/08/14/187204.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Tue, 14 Aug 2012 13:19:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2012/08/14/187204.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/187204.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2012/08/14/187204.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/187204.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/187204.html</trackback:ping><description><![CDATA[int x;<br /><div>decltype(x) 鍜?nbsp; decltype((x))    鐨勭被鍨嬫槸涓嶄竴鏍風殑銆?/div><div>decltype(x) 鍜?nbsp; decltype(*&x)   鐨勭被鍨嬫槸涓嶄竴鏍風殑銆?br /><div></div><br /><div>decltype(x)鐨勭被鍨嬫槸 int<br />decltype((x)) 鍜?decltype(*&x)  鐨勭被鍨嬫槸 int&<br /><div><br />C++11鏍囧噯錛?/div></div></div><div>The type denoted by decltype(e) is defined as follows:<br />  — if e is an unparenthesized id-expression or an unparenthesized class member<br />     access (5.2.5), decltype(e) is the type of the entity named by e. If there<br />     is no such entity, or if e names a set of overloaded functions, the program<br />     is ill-formed;<br />  — otherwise, if e is an xvalue, decltype(e) is T&&, where T is the type of e;<br />  — otherwise, if e is an lvalue, decltype(e) is T&, where T is the type of e;<br />  — otherwise, decltype(e) is the type of e.</div><img src ="http://www.shnenglu.com/flyinghearts/aggbug/187204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2012-08-14 21:19 <a href="http://www.shnenglu.com/flyinghearts/archive/2012/08/14/187204.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍐呭祵姹囩紪瀹炵幇鐨勫嚱鏁拌漿鍙?/title><link>http://www.shnenglu.com/flyinghearts/archive/2012/08/05/186382.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Sun, 05 Aug 2012 13:02:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2012/08/05/186382.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/186382.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2012/08/05/186382.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/186382.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/186382.html</trackback:ping><description><![CDATA[  寮勭潃鐜╃殑銆傚姛鑳芥槸綆鍗曠殑瀹炵幇鍑芥暟杞彂錛屽嵆<br />      璋冪敤CALL(func)錛岃漿涓鴻皟鐢╢unc()錛?div>      璋冪敤CALL(func, arg1, arg2) 錛岃漿涓鴻皟鐢╢unc(arg1, arg2)</div><br /><div>  浠g爜涓紝瀹廋ALL/STDCALL鍒嗗埆鐢ㄦ潵璋冪敤  __cdecl/__stdcall 璋冪敤瑙勫畾鐨勫嚱鏁?br />             unsafe_call 涓よ呴兘鍙皟鐢紝浣嗗畠涓嶆槸澶氱嚎紼嬪畨鍏ㄧ殑銆?br /><br />  浠g爜鍙敮鎸亁86 32浣嶏紝 闄ゅ唴宓屾眹緙栭儴鍒嗭紝灝介噺絎﹀悎C++11鏍囧噯銆?br />       </div>鍘熺悊錛?br />     鍒氳繘鍏ュ嚱鏁版椂錛?br />     [esp]           鍑芥暟榪斿洖鍦板潃<br />     [esp + 4]     絎竴涓弬鏁幫紝鍗寵漿鍙戝嚱鏁扮殑鍦板潃<br /><div>     [esp + 8]     絎簩涓弬鏁幫紝鍗寵漿鍙戝嚱鏁扮殑鐨勭涓涓弬鏁?/div>     ...  <br />    <br />      鍙鍐欎笁琛屾眹緙栨寚浠ゅ疄鐜頒竴涓猚_call鍑芥暟錛屽氨鍙皟鐢ㄨ漿鍙戝嚱鏁?br /><div>      pop eax                             ; eax涓哄嚱鏁拌繑鍥炲湴鍧<br />      xchg dword ptr[esp], eax     ; eax涓鴻漿鍙戝嚱鏁扮殑鍦板潃錛孾esp]涓哄嚱鏁拌繑鍥炲湴鍧<br />      jmp eax<br />      <br /><div>     褰撹漿鍙戝嚱鏁版槸__cdecl錛屽嵆杞彂鍑芥暟涓嶄細璋冭妭鏍堬紝鐢變簬鍦╟_call錛宲op eax錛屼嬌esp澶氬姞浜?錛屽洜鑰屽湪璋冪敤瀹宑_call鍚庡簲璇ユ墜鍔ㄥ皢esp鍊煎噺4錛屼繚璇佹爤騫寵 銆?br />    <div>    褰撹漿鍙戝嚱鏁版槸__stdcall錛岃漿鍙戝嚱鏁頒細璋冭妭鏍堬紝璋冪敤杞彂鍑芥暟瀹屾瘯鍚庯紝鏍堝凡緇忎繚鎸佸鉤琛★紝鍥犺岃皟鐢╟_call瀹屾瘯錛屼笉搴旇榪涜鏍堟寚閽堣皟鑺傘備技涔庡皢c_call鐨勮皟鐢ㄦ敼涓篲_stdcall鍗沖彲錛屼絾瀹為檯涓奵_call鏈夊彉闀垮弬鏁幫紝鏀規垚__stdcall娌℃晥鏋滐紝姣忔璋冪敤緙栬瘧鍣ㄨ繕鏄細鑷姩鐢熸垚璋冭妭鏍堟寚閽堜唬鐮併傚洜鑰屽彧鑳芥瘡嬈¤皟鐢ㄥ畬姣曪紝緙栬瘧鍣ㄧ粰esp鍔犱簡澶氬皯錛屽氨鎵嬪姩鍑忓灝戙傦紙緙栬瘧鍣ㄤ笉涓瀹氫細鐢熸垚 call  xxxx; add esp, xx榪欐牱鐨勪唬鐮侊紝閫氳繃鏀瑰嚱鏁拌繑鍥炲湴鍧錛屽拷鐣ュ悗闈㈢殑add esp, xx鎸囦護鏄緢緋熺硶鐨勫仛娉曘傦級</div></div> </div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_202018" onclick="this.style.display='none'; Code_Closed_Text_202018.style.display='none'; Code_Open_Image_202018.style.display='inline'; Code_Open_Text_202018.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" height="16" align="top" width="11"><img id="Code_Open_Image_202018" style="display: none" onclick="this.style.display='none'; Code_Open_Text_202018.style.display='none'; Code_Closed_Image_202018.style.display='inline'; Code_Closed_Text_202018.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" height="16" align="top" width="11"><span id="Code_Closed_Text_202018" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">call_redirect</span><span id="Code_Open_Text_202018" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">  1</span> <span style="color: #000000; ">#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">cstdio</span><span style="color: #000000; ">></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">  2</span> <span style="color: #000000; ">#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">cstdarg</span><span style="color: #000000; ">></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">  3</span> <span style="color: #000000; ">#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">windows.h</span><span style="color: #000000; ">></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">  4</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">  5</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> CALL(<img src="http://www.shnenglu.com/Images/dot.gif" alt="" />)    c_call(__VA_ARGS__); ASM_SUB_ESP(4);</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">  6</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> STDCALL(<img src="http://www.shnenglu.com/Images/dot.gif" alt="" />) c_call(__VA_ARGS__); ASM_SUB_ESP(MACRO_ARGS(__VA_ARGS__) * 4);</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">  7</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">  8</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> MACRO_EXPAND(x) x</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">  9</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> MACRO_NTH_ARG(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, <img src="http://www.shnenglu.com/Images/dot.gif" alt="" />) a9</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 10</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> MACRO_ARGS(<img src="http://www.shnenglu.com/Images/dot.gif" alt="" />) \</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 11</span> <span style="color: #000000; ">    MACRO_EXPAND(MACRO_NTH_ARG(__VA_ARGS__, </span><span style="color: #000000; ">9</span><span style="color: #000000; ">, </span><span style="color: #000000; ">8</span><span style="color: #000000; ">, </span><span style="color: #000000; ">7</span><span style="color: #000000; ">, </span><span style="color: #000000; ">6</span><span style="color: #000000; ">, </span><span style="color: #000000; ">5</span><span style="color: #000000; ">, </span><span style="color: #000000; ">4</span><span style="color: #000000; ">, </span><span style="color: #000000; ">3</span><span style="color: #000000; ">, </span><span style="color: #000000; ">2</span><span style="color: #000000; ">, </span><span style="color: #000000; ">1</span><span style="color: #000000; ">, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">))<br /></span><span style="color: #008080; "> 12</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 13</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#if</span><span style="color: #000000; ">  __GNUC__</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 14</span> <span style="color: #000000; ">  </span><span style="color: #008000; ">//</span><span style="color: #008000; "> please enable option, -masm=intel</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 15</span> <span style="color: #008000; "></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> ASM_SUB_ESP(x) asm("lea esp, dword ptr[esp - %0]" : : "i"(x))</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 16</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 17</span> <span style="color: #000000; ">  </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> c_call(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; "> pfn, <img src="http://www.shnenglu.com/Images/dot.gif" alt="" />) asm(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">c_call</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; "> 18</span> <span style="color: #000000; ">  asm(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">                          \n\</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 19</span> <span style="color: #000000; "></span><span style="color: #000000; ">    c_call:                      \n\<br /></span><span style="color: #008080; "> 20</span> <span style="color: #000000; ">      pop eax;                   \n\<br /></span><span style="color: #008080; "> 21</span> <span style="color: #000000; ">      xchg dword ptr[esp], eax;  \n\<br /></span><span style="color: #008080; "> 22</span> <span style="color: #000000; ">      jmp eax;                   \n\<br /></span><span style="color: #008080; "> 23</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 24</span> <span style="color: #000000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 25</span> <span style="color: #000000; ">  </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> unsafe_call(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; "> pfn, <img src="http://www.shnenglu.com/Images/dot.gif" alt="" />)  asm(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">unsafe_call</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; "> 26</span> <span style="color: #000000; ">  asm(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">                                   \n\</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 27</span> <span style="color: #000000; "></span><span style="color: #000000; ">      .lcomm old_ret_addr, </span><span style="color: #000000; ">4</span><span style="color: #000000; ">              \n\<br /></span><span style="color: #008080; "> 28</span> <span style="color: #000000; ">      .lcomm old_esp_value,</span><span style="color: #000000; ">4</span><span style="color: #000000; ">              \n\<br /></span><span style="color: #008080; "> 29</span> <span style="color: #000000; ">    unsafe_call:                          \n\<br /></span><span style="color: #008080; "> 30</span> <span style="color: #000000; ">      pop  dword ptr old_ret_addr;        \n\<br /></span><span style="color: #008080; "> 31</span> <span style="color: #000000; ">      mov  dword ptr old_esp_value, esp;  \n\<br /></span><span style="color: #008080; "> 32</span> <span style="color: #000000; ">      mov eax, dword ptr[esp];            \n\<br /></span><span style="color: #008080; "> 33</span> <span style="color: #000000; ">      mov dword ptr[esp], offset last;    \n\<br /></span><span style="color: #008080; "> 34</span> <span style="color: #000000; ">      jmp eax;                            \n\<br /></span><span style="color: #008080; "> 35</span> <span style="color: #000000; ">    last:                                 \n\<br /></span><span style="color: #008080; "> 36</span> <span style="color: #000000; ">      mov esp, dword ptr old_esp_value;   \n\<br /></span><span style="color: #008080; "> 37</span> <span style="color: #000000; ">      jmp  dword ptr old_ret_addr;        \n\<br /></span><span style="color: #008080; "> 38</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 39</span> <span style="color: #000000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 40</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#elif</span><span style="color: #000000; ">  _MSC_VER</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 41</span> <span style="color: #000000; ">  </span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> ASM_SUB_ESP(x) __asm lea esp, dword ptr [esp - x]</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 42</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 43</span> <span style="color: #000000; ">  __declspec(naked) </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> c_call(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; "> pfn, <img src="http://www.shnenglu.com/Images/dot.gif" alt="" />)<br /></span><span style="color: #008080; "> 44</span> <span style="color: #000000; ">  {<br /></span><span style="color: #008080; "> 45</span> <span style="color: #000000; ">    __asm {<br /></span><span style="color: #008080; "> 46</span> <span style="color: #000000; ">      pop eax;<br /></span><span style="color: #008080; "> 47</span> <span style="color: #000000; ">      xchg dword ptr[esp], eax;<br /></span><span style="color: #008080; "> 48</span> <span style="color: #000000; ">      jmp eax;<br /></span><span style="color: #008080; "> 49</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; "> 50</span> <span style="color: #000000; ">  }<br /></span><span style="color: #008080; "> 51</span> <span style="color: #000000; ">  __declspec(naked) </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> unsafe_call(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; "> pfn, <img src="http://www.shnenglu.com/Images/dot.gif" alt="" />)<br /></span><span style="color: #008080; "> 52</span> <span style="color: #000000; ">  {<br /></span><span style="color: #008080; "> 53</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; "> old_ret_addr;<br /></span><span style="color: #008080; "> 54</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; "> old_esp_value;<br /></span><span style="color: #008080; "> 55</span> <span style="color: #000000; ">    __asm {<br /></span><span style="color: #008080; "> 56</span> <span style="color: #000000; ">      pop  old_ret_addr;<br /></span><span style="color: #008080; "> 57</span> <span style="color: #000000; ">      mov  old_esp_value, esp;<br /></span><span style="color: #008080; "> 58</span> <span style="color: #000000; ">      mov eax, dword ptr[esp];<br /></span><span style="color: #008080; "> 59</span> <span style="color: #000000; ">      mov dword ptr[esp], offset last;<br /></span><span style="color: #008080; "> 60</span> <span style="color: #000000; ">      jmp eax;<br /></span><span style="color: #008080; "> 61</span> <span style="color: #000000; ">    last:<br /></span><span style="color: #008080; "> 62</span> <span style="color: #000000; ">      mov esp, old_esp_value;<br /></span><span style="color: #008080; "> 63</span> <span style="color: #000000; ">      jmp  old_ret_addr;<br /></span><span style="color: #008080; "> 64</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; "> 65</span> <span style="color: #000000; ">  }<br /></span><span style="color: #008080; "> 66</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 67</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#else</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 68</span> <span style="color: #000000; ">  </span><span style="color: #0000FF; ">#error</span><span style="color: #000000; "> "only gcc and msvc are supported"</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 69</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">#endif</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 70</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 71</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 72</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> show(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; "> format, <img src="http://www.shnenglu.com/Images/dot.gif" alt="" />)<br /></span><span style="color: #008080; "> 73</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; "> 74</span> <span style="color: #000000; ">  va_list args;<br /></span><span style="color: #008080; "> 75</span> <span style="color: #000000; ">  va_start(args, format);<br /></span><span style="color: #008080; "> 76</span> <span style="color: #000000; ">  vprintf(format, args);<br /></span><span style="color: #008080; "> 77</span> <span style="color: #000000; ">  va_end (args);<br /></span><span style="color: #008080; "> 78</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; "> 79</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 80</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> mysleep() { Sleep(</span><span style="color: #000000; ">10</span><span style="color: #000000; ">); }<br /></span><span style="color: #008080; "> 81</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 82</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> test1()<br /></span><span style="color: #008080; "> 83</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; "> 84</span> <span style="color: #000000; ">  </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">5</span><span style="color: #000000; ">, b </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">6</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; "> 85</span> <span style="color: #000000; ">  show(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d + %d = %d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, a, b, a </span><span style="color: #000000; ">+</span><span style="color: #000000; "> b);<br /></span><span style="color: #008080; "> 86</span> <span style="color: #000000; ">  CALL((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)printf, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d + %d = %d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, a, b, a </span><span style="color: #000000; ">+</span><span style="color: #000000; "> b);<br /></span><span style="color: #008080; "> 87</span> <span style="color: #000000; ">  CALL((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)mysleep);<br /></span><span style="color: #008080; "> 88</span> <span style="color: #000000; ">  CALL((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)show,   </span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d + %d = %d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, a, b, a </span><span style="color: #000000; ">+</span><span style="color: #000000; "> b);<br /></span><span style="color: #008080; "> 89</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; "> 90</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 91</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> test2()<br /></span><span style="color: #008080; "> 92</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; "> 93</span> <span style="color: #000000; ">  STDCALL((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)MessageBoxA, NULL, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">text1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">caption1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, MB_OK);<br /></span><span style="color: #008080; "> 94</span> <span style="color: #000000; ">  STDCALL((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)Sleep, </span><span style="color: #000000; ">10</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; "> 95</span> <span style="color: #000000; ">  STDCALL((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)MessageBoxA, NULL, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">text2</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">caption2</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, MB_OK);<br /></span><span style="color: #008080; "> 96</span> <span style="color: #000000; ">  STDCALL((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)Sleep, </span><span style="color: #000000; ">100</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; "> 97</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; "> 98</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 99</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> test3()<br /></span><span style="color: #008080; ">100</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; ">101</span> <span style="color: #000000; ">  </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">5</span><span style="color: #000000; ">, b </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">6</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">102</span> <span style="color: #000000; ">  unsafe_call((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)printf, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d + %d = %d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, a, b, a </span><span style="color: #000000; ">+</span><span style="color: #000000; "> b);<br /></span><span style="color: #008080; ">103</span> <span style="color: #000000; ">  unsafe_call((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)mysleep);<br /></span><span style="color: #008080; ">104</span> <span style="color: #000000; ">  unsafe_call((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)show,   </span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d + %d = %d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, a, b, a </span><span style="color: #000000; ">+</span><span style="color: #000000; "> b);<br /></span><span style="color: #008080; ">105</span> <span style="color: #000000; ">  unsafe_call((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)MessageBoxA, NULL, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">text1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">caption1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, MB_OK);<br /></span><span style="color: #008080; ">106</span> <span style="color: #000000; ">  unsafe_call((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)Sleep, </span><span style="color: #000000; ">10</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">107</span> <span style="color: #000000; ">  unsafe_call((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)MessageBoxA, NULL, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">text2</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">caption2</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, MB_OK);<br /></span><span style="color: #008080; ">108</span> <span style="color: #000000; ">  unsafe_call((</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)Sleep, </span><span style="color: #000000; ">100</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">109</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; ">110</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">111</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br /></span><span style="color: #008080; ">112</span> <span style="color: #000000; ">{<br /></span><span style="color: #008080; ">113</span> <span style="color: #000000; ">  test1();<br /></span><span style="color: #008080; ">114</span> <span style="color: #000000; ">  test2();<br /></span><span style="color: #008080; ">115</span> <span style="color: #000000; ">  test3();<br /></span><span style="color: #008080; ">116</span> <span style="color: #000000; ">  </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">117</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; ">118</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">119</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">120</span> <span style="color: #000000; "></span></span></div><img src ="http://www.shnenglu.com/flyinghearts/aggbug/186382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2012-08-05 21:02 <a href="http://www.shnenglu.com/flyinghearts/archive/2012/08/05/186382.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>閬垮厤璁$畻榪囩▼涓嚭鐜版孩鍑虹殑涓涓妧宸?/title><link>http://www.shnenglu.com/flyinghearts/archive/2012/03/18/168267.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Sun, 18 Mar 2012 13:16:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2012/03/18/168267.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/168267.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2012/03/18/168267.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/168267.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/168267.html</trackback:ping><description><![CDATA[<div> <p> </p> <p style="text-indent: 21pt;"><span style="font-family: 瀹嬩綋;">鍏堢湅涓閬撻潰璇曢錛?/span></p><p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman""><br /></span></p> <p style="text-indent:23.6pt;"><strong><span style="font-size:12.0pt;font-family: 瀹嬩綋;Times New Roman";Times New Roman"">闀垮害涓?/span></strong><strong><span style="font-size:12.0pt">n</span></strong><strong><span style="font-size:12.0pt;font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鐨勬暟緇勶紝鐢辨暟瀛?/span></strong><strong><span style="font-size:12.0pt">1</span></strong><strong><span style="font-size:12.0pt;font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鍒?/span></strong><strong><span style="font-size:12.0pt">n</span></strong><strong><span style="font-size:12.0pt;font-family: 瀹嬩綋;Times New Roman";Times New Roman"">緇勬垚錛屽叾涓暟瀛?/span></strong><strong><span style="font-size:12.0pt">a</span></strong><strong><span style="font-size:12.0pt;font-family: 瀹嬩綋;Times New Roman";Times New Roman"">涓嶅嚭鐜幫紝鏁板瓧</span></strong><strong><span style="font-size:12.0pt">b</span></strong><strong><span style="font-size:12.0pt;font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鍑虹幇涓ゆ錛屽叾瀹冪殑鏁板瓧鎭板ソ鍑虹幇涓嬈°傛庢牱閫氳繃鍙閬嶅巻涓嬈℃暟緇勶紝鎵懼嚭鏁板瓧</span></strong><strong><span style="font-size:12.0pt">a</span></strong><strong><span style="font-size:12.0pt;font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鍜?/span></strong><strong><span style="font-size:12.0pt">b</span></strong><strong><span style="font-size:12.0pt;font-family: 瀹嬩綋;Times New Roman";Times New Roman"">銆?/span></strong></p> <p> </p> <p> </p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐢變簬鍙兘閬嶅巻涓嬈★紝鍦ㄩ亶鍘嗘暟緇?/span>arr<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏃訛紝綆楀嚭</span> a<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鍜?/span>b<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐨勫樊鍊鹼紝浠ュ強</span>a<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍜?/span>b<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鐨勫鉤鏂瑰樊錛岄氳繃瑙f柟紼嬶紝鍗沖彲姹傚緱</span>a<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍜?/span>b<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">銆傚叿浣撳仛娉曚負錛?/span></p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">璁撅細</span></p> <p><span><span>      </span>s1 = 1 + 2 + ... + n           (= n * (n + 1) / 2)</span></p> <p><span><span>      </span>s2 = arr[0] + arr[1] + ... + arr[n - 1]</span></p> <p><span>    </span></p> <p><span><span>      </span>r1 = 1 + 4 + ... + n^2          (= n * (n + 1) * (2 * n + 1) / 6)</span></p> <p><span><span>      </span>r2 = arr[0]^2 + arr[1]^2 + ... + arr[n - 1]^2</span></p> <p><span><span>      </span></span></p> <p><span>     c = a - b = s1 - s2</span></p> <p><span>     d = a^2 - b^2 = r1 - r2</span></p> <p> <span>   </span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏄劇劧錛?/span> <span> a + b = (r1 - r2) / (s1 - s2) </span></p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏍規嵁</span>a+b<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鐨勫煎拰</span>a-b<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐨勫鹼紝寰堝鏄撳氨鍙畻鍑?/span>a<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍜?/span>b<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">銆?/span></p> <p> </p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">綆楁硶铏界劧綆鍗曪紝浣嗗疄鐜拌搗鏉ワ紝鍗存湁涓涓緢澶ч棶棰橈細璁$畻</span> s1<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">銆?/span>s2<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">銆?/span>r1<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">銆?/span>r2<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">榪?/span>4<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">涓暟鏃訛紝璁$畻榪囩▼涓彲鑳藉嚭鐜版孩鍑猴紝閫犳垚緇撴灉涓嶅噯銆傜敱浜庢渶緇堢洰鐨勬槸涓轟簡璁$畻鍑?/span>c<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍜?/span>d<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛屼竴涓敼榪涚殑鏂規硶鏄細</span></p> <p><span> c = s1 - s2 = (1 - arr[0]) + (2 - arr[1]) + ... + (n - arr[n - 1])</span></p> <p><span> d = (1 - arr[0]^2) + (4 - arr[1]^2) + ... + (n^2 - arr[n - 1]^2)</span></p> <p><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浣嗚繖鏍風殑鍋氭硶錛屽茍涓嶈兘瑙e喅闂錛?/span>n<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">紼嶅井澶х偣錛岀収鏍峰瓨鍦ㄦ孩鍑洪棶棰樸?/span></p> <p> </p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">閭d箞鎬庢牱鎵嶈兘閬垮厤璁$畻婧㈠嚭鍛紵絳旀寰堢畝鍗曪紝<strong><span style="color:red">鐢ㄦā榪愮畻錛?/span></strong>姣忚繘琛屼竴嬈″姞鍑忚繍綆楁椂錛岄兘鍙栫粨鏋滀負鍘熺粨鏋滈櫎浠ヤ竴涓凍澶熷ぇ鐨勫父鏁?/span>M<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐨勪綑鏁般傝繖鏍峰姞鍑忚繍綆椾腑錛屽氨涓嶄細鐜扮幇婧㈠嚭闂銆傛渶鍚庡啀鐢?/span> c % M<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">銆?/span>d % M<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛屾帹嫻嬪嚭</span>c<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">銆?/span>d<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐨勫叿浣撳箋傛瘮濡傝錛岃綆?/span>s2<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏀逛負璁$畻錛?/span></p> <p> <span>  s2 % M = ((((arr[0] % M) + arr[1]) % M + ...) % M + arr[n - 1]) %M</span></p> <p><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浠庤〃闈笂鐪嬶紝閲囩敤妯¤繍綆楀悗錛岃綆楅噺浼氬鍔犲緢澶氥備絾瀹為檯涓婏紝鑻?/span>M<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍙栧悎閫傜殑鍊兼椂錛岃綆楅噺騫朵笉浼氬鍔狅紒錛?/span></p> <p> </p> <p style="text-indent:21.75pt"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍏堝洖欏句笅璁$畻鏈哄熀鏈煡璇嗭細涓や釜鍚?/span>N<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浣嶏紙瀵勫瓨鍣ㄤ負</span>N<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浣嶏級鐨勪簩榪涘埗鏃犵鍙鋒暣鏁?/span>a<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍜?/span>b<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鐩稿姞錛岃嫢緇撴灉婧㈠嚭浜嗭紝</span>CPU<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浼氭庝箞澶勭悊錛熷綋鐒舵槸灝嗘孩鍑虹殑閭d竴浣嶅拷鐣ユ帀錛堝彲鑳借繕瑕佽緗笅婧㈠嚭鏍囧織錛夛紝寰楀埌鐨勭粨鏋滃疄闄呬笂鏄細</span>(a + b) mod 2^N<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">銆?strong><span style="color:red">鏃犵鍙鋒暟闂寸殑綆楁湳榪愮畻錛屾湰璐ㄤ笂灝辨槸妯¤繍綆?/span></strong>銆傜幇鍦ㄧ殑</span>CPU<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">閮?strong><span style="color:red">閲囩敤浜岃ˉ鏁版潵琛ㄧず璐熸暣鏁幫紝鏈川涓婁篃鏄繍鐢ㄦā榪愮畻</span></strong>錛堟暀縐戜功灝嗕簩琛ユ暟琛ㄧず鐨勮礋鏁存暟綆鍗曞畾涔変負錛氬姝f暣鏁板彇鍙嶅悗鍔?/span>1<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛夛紝榪欎笌鏃犵鍙鋒暟闂寸殑榪愮畻鏄竴鑷寸殑錛屽湪瀹炵幇涓婏紝姣旂敤鍏跺畠鏂規硶錛堟瘮濡傝涓琛ユ暟錛夎〃紺鴻礋鏁存暟錛岃浼樼編鏄撳疄鐜般?/span></p> <p style="text-indent:21.75pt"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍦?/span>32<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浣嶅鉤鍙頒笅錛?/span> <span>-x mod 2^32 = 2^32 – x (x > 0)</span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛?/span> </p> <p style="text-indent:21.75pt"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍥犺?/span>-1<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐨勪簩榪涘埗琛ㄧず灝辨槸錛?/span>0xFFFFFFFF</p> <p> </p> <p style="text-indent:21.75pt"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浜嗚В浜嗚繖浜涳紝灝變笉浼氬鎬?/span>C/C++<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏍囧噯鐨勮瀹氾細鏃犵鍙鋒暟闂寸殑榪愮畻鏄ā榪愮畻涓嶄細婧㈠嚭錛涙湁絎﹀彿鏁拌漿涓烘棤絎︽暟錛岄噰鐢ㄦā榪愮畻鍚庣殑鍊箋傦紙涓轟簡鍏煎娌¢噰鐢ㄤ簩琛ユ暟鐨勬満鍣紝鏃犵鍙鋒暟杞負鏈夌鍙鋒暟鏃訛紝鑻ユ棤絎﹀彿鏁扮殑鏁板艱秴鍑轟簡鏈夌鍙鋒暟鍙〃紺虹殑鑼冨洿錛岀粨鏋滄槸騫沖彴鐩稿叧鐨勩傦級</span></p> <p> </p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍥犺岋紝鍦ㄥ</span>32<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浣?/span>CPU<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">騫沖彴錛屽彲浠ュ厛灝嗘湁絎﹀彿鏁拌漿涓烘棤絎﹀彿鏁幫紝鍐嶅彇</span>M = 2 ^32<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">銆傞渶瑕佺壒鍒敞鎰忕殑鏄紝搴旇閲囩敤澶氬皯浣嶇殑鏃犵鍙鋒暟淇濆瓨璁$畻涓敤鍒扮殑鏁板鹼紝濡備綍閬垮厤妯¤繍綆楀彲鑳藉甫鏉ョ殑闂錛?/span></p> <p> </p> <p><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">①銆鏃犵鍙鋒暟綾誨瀷鐨勯夋嫨錛?/span></p> <p style="margin-left:27.0pt; text-indent:-6.0pt;">a<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">銆?/span>b<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鐨勫彇鍊艱寖鍥翠負錛?/span>[1, n]<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛?/span> </p> <p style="text-indent:21.0pt;">c % M = (a - b) % M <span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐨勫彇鍊艱寖鍥翠負錛?/span>[1, n] (a > b<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏃?/span>)<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛?/span><span>   [M - n, M - 1] (a < b</span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏃?/span>)</p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">榪欎袱涓寖鍥翠笉鑳介噸鍙狅紝鑰屽洜</span> n < M - n <span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍗?/span> 2 * n < M</p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鑻?/span> M<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鍙?/span>2^32<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐨勮瘽錛屼笖</span><span> n < 2^31</span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛?/span> <span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鍙互閲囩敤</span>32<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浣嶆棤絎﹀彿鏁拌〃紺?/span>c<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐨勫箋?/span></p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏍規嵁</span>c % M<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍊煎湪鍝竴涓寖鍥達紝鍙互紜畾</span>a > b<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">榪樻槸</span>a < b<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛?/span></p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鐢變簬榪愮畻榪囩▼涓兘鏄噰鐢ㄦ棤絎﹀彿鏁拌綆楋紝褰?/span> a < b<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏃訛紝蹇呴』榪涜濡備笅璋冩暣錛?/span></p> <p><span>        c % M </span><span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">璋冩暣涓?/span> (-c) % M</p> <p><span>        d % M </span><span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">璋冩暣涓?/span> (-d) % M</p> <p style="text-indent:21.0pt;"><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">榪欐牱鎵嶈兘淇濊瘉緇撴灉鐨勬紜с?/span></p> <p> </p> <p><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">②</span> <span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鐢ㄥ叕寮忚綆楁墍鏈夋暟瀛楃殑鍜屻佸鉤鏂瑰拰鏃訛紝鍙兘鍑虹幇鐨勯棶棰橈細</span></p> <p><span>   </span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">妯¤繍綆楁弧瓚籌細</span><span> (a <strong>*</strong> b) % M  = ((a % M) <strong>*</strong> (b % M)) % M</span></p> <p><span>     </span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">浣?strong>涓嶆弧瓚?/strong>錛?/span><span> (a<strong> /</strong> b) % M  = ((a % M) <strong>/</strong> (b % M)) % M</span></p> <p><span>   </span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鍦ㄨ綆?/span> (n * (n + 1) / 2) % M<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鏃訛紝</span> <span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">涓嶈兘鍐欐垚錛?/span></p> <p> <span>     s = ((n * (n + 1)) % M / 2) % M</span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛?/span></p> <p><span>   </span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鑰屽簲璇ュ啓鎴愶細</span></p> <p><span>     if  (n % 2 == 0)   s = ((n / 2) * (n + 1)) % M</span></p> <p> <span>    else             s = (((n + 1) / 2) * n) % M</span></p> <p><span>   </span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">鎴栬咃細</span><span>s = (INT((n + 1) / 2) * (n + (n + 1) % 2)) % M </span><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">錛堝叾涓?/span>INT(x)<span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">涓哄彇灝忔暟</span>x<span style="font-family: 瀹嬩綋;Times New Roman";Times New Roman"">鐨勬暣鏁伴儴浠斤級銆?/span></p> <p> </p> <p><span style="font-family:瀹嬩綋;Times New Roman";Times New Roman"">瀹屾暣浠g爜錛?/span></p> <p style="text-align: left;" align="left"> </p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; "><br />#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">climits</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">cassert</span><span style="color: #000000; ">></span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> SMALL_ARRAY 0</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; "> Pair {<br />  </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> zero;<br />  </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> twice;<br />};<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">32浣岰PU騫沖彴錛岄暱搴涓瀹氬皬浜?^16嬈℃柟鏃訛紝琛ㄧず涓涓暟鐨勫鉤鏂瑰鹼紝鍙敤32浣嶆棤絎﹀彿鏁扮被鍨嬶紝鏁堢巼寰堥珮銆?br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">闀垮害n鑻ュ湪[2^16, 2^31]鍖洪棿錛屽氨蹇呴』鐢ㄥ埌64浣嶆棤絎﹀彿鏁扮被鍨嬶紝鏁堢巼杈冮珮銆?br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">闀垮害n鑻ュ湪[2^31, 2^32)鏃訛紝琛ㄧず 鎵鏈夋暟鐨勫拰sum錛屽氨蹇呴』鏀圭敤64浣嶆棤絎﹀彿鏁扮被鍨嬶紝鏁堢巼涓嶉珮銆?nbsp; </span><span style="color: #008000; "><br /></span><span style="color: #000000; ">Pair find_number(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> arr[], unsigned len)<br />{<br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned bits </span><span style="color: #000000; ">=</span><span style="color: #000000; "> CHAR_BIT </span><span style="color: #000000; ">*</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(unsigned);<br /></span><span style="color: #0000FF; ">#if</span><span style="color: #000000; "> SMALL_ARRAY</span><span style="color: #000000; "><br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned max_len </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">1u</span><span style="color: #000000; "> </span><span style="color: #000000; "><<</span><span style="color: #000000; "> (bits </span><span style="color: #000000; ">/</span><span style="color: #000000; "> </span><span style="color: #000000; ">2u</span><span style="color: #000000; ">);<br />  typedef unsigned </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">uint</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">#else</span><span style="color: #000000; "><br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned max_len </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">1u</span><span style="color: #000000; "> </span><span style="color: #000000; "><<</span><span style="color: #000000; "> (bits </span><span style="color: #000000; ">-</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />  typedef unsigned </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">uint</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">#endif</span><span style="color: #000000; "><br /><br />  assert(arr </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> len </span><span style="color: #000000; ">>=</span><span style="color: #000000; "> </span><span style="color: #000000; ">2</span><span style="color: #000000; "> </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> len </span><span style="color: #000000; "><</span><span style="color: #000000; "> max_len);<br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned</span><span style="color: #000000; ">*</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> data </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)arr;<br />  unsigned sum </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">uint</span><span style="color: #000000; "> square_sum </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (unsigned i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; "><</span><span style="color: #000000; "> len; </span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)  {<br />    </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned value </span><span style="color: #000000; ">=</span><span style="color: #000000; "> data[i];<br />    sum </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> value;<br />    square_sum </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">uint</span><span style="color: #000000; ">)value </span><span style="color: #000000; ">*</span><span style="color: #000000; "> value;     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">娉ㄦ剰涓や釜鏁扮殑涔樼Н鏄惁浼氭孩鍑?nbsp; </span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  }<br />  <br />  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">1 + 2 + 3 + <img src="http://www.shnenglu.com/Images/dot.gif" alt="" /> + len = len * (len + 1) / 2</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">uint</span><span style="color: #000000; "> sum_all </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (len </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">) </span><span style="color: #000000; ">/</span><span style="color: #000000; "> </span><span style="color: #000000; ">2u</span><span style="color: #000000; "> </span><span style="color: #000000; ">*</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">uint</span><span style="color: #000000; ">)(len </span><span style="color: #000000; ">+</span><span style="color: #000000; "> (len </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">) </span><span style="color: #000000; ">%</span><span style="color: #000000; "> </span><span style="color: #000000; ">2u</span><span style="color: #000000; ">);<br />  <br />  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">1^2 + 2^2 + 3^2 + <img src="http://www.shnenglu.com/Images/dot.gif" alt="" /> + len^2 = len * (len + 1) * (2 * len + 1) / 6</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned len2 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">2u</span><span style="color: #000000; "> </span><span style="color: #000000; ">*</span><span style="color: #000000; "> len </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">uint</span><span style="color: #000000; "> square_sum_all </span><span style="color: #000000; ">=</span><span style="color: #000000; "> len2 </span><span style="color: #000000; ">%</span><span style="color: #000000; "> </span><span style="color: #000000; ">3u</span><span style="color: #000000; "> </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; "> </span><span style="color: #000000; ">?</span><span style="color: #000000; "> len2 </span><span style="color: #000000; ">/</span><span style="color: #000000; "> </span><span style="color: #000000; ">3u</span><span style="color: #000000; "> </span><span style="color: #000000; ">*</span><span style="color: #000000; "> sum_all : sum_all </span><span style="color: #000000; ">/</span><span style="color: #000000; "> </span><span style="color: #000000; ">3u</span><span style="color: #000000; "> </span><span style="color: #000000; ">*</span><span style="color: #000000; "> len2;<br />  <br />  unsigned difference </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (unsigned)sum_all </span><span style="color: #000000; ">-</span><span style="color: #000000; "> sum;<br />  </span><span style="color: #0000FF; ">uint</span><span style="color: #000000; "> square_difference </span><span style="color: #000000; ">=</span><span style="color: #000000; "> square_sum_all </span><span style="color: #000000; ">-</span><span style="color: #000000; "> square_sum;<br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">bool</span><span style="color: #000000; "> is_negative </span><span style="color: #000000; ">=</span><span style="color: #000000; "> difference </span><span style="color: #000000; ">></span><span style="color: #000000; "> INT_MAX;<br /><br />  </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (is_negative) {<br />    difference </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">difference;<br />    square_difference </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">square_difference;<br />  } <br />   <br />  assert(difference </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; "> </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> square_difference </span><span style="color: #000000; ">%</span><span style="color: #000000; "> difference </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned sum_two </span><span style="color: #000000; ">=</span><span style="color: #000000; "> square_difference </span><span style="color: #000000; ">/</span><span style="color: #000000; "> difference;<br />  <br />  assert((sum_two </span><span style="color: #000000; ">+</span><span style="color: #000000; "> difference) </span><span style="color: #000000; ">%</span><span style="color: #000000; "> </span><span style="color: #000000; ">2u</span><span style="color: #000000; "> </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned larger  </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (sum_two </span><span style="color: #000000; ">+</span><span style="color: #000000; "> difference) </span><span style="color: #000000; ">/</span><span style="color: #000000; "> </span><span style="color: #000000; ">2u</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> unsigned smaller </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (sum_two </span><span style="color: #000000; ">-</span><span style="color: #000000; "> difference) </span><span style="color: #000000; ">/</span><span style="color: #000000; "> </span><span style="color: #000000; ">2u</span><span style="color: #000000; ">;<br />  <br />  </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (is_negative) {<br />    </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> Pair result </span><span style="color: #000000; ">=</span><span style="color: #000000; "> { smaller, larger};<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> result;<br />  }<br />  </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> Pair result </span><span style="color: #000000; ">=</span><span style="color: #000000; "> { larger, smaller};<br />  </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> result;<br />}<br /><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{<br /><br />}<br /><br /><br /></span></div></div><img src ="http://www.shnenglu.com/flyinghearts/aggbug/168267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2012-03-18 21:16 <a href="http://www.shnenglu.com/flyinghearts/archive/2012/03/18/168267.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>VC 2010銆error D8027錛屾棤娉曟墽琛宑1xx.dll鐨勮В鍐蟲柟娉?/title><link>http://www.shnenglu.com/flyinghearts/archive/2011/07/19/151417.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Tue, 19 Jul 2011 14:07:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2011/07/19/151417.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/151417.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2011/07/19/151417.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/151417.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/151417.html</trackback:ping><description><![CDATA[<br /><div>銆銆鏅氫笂鎯寵窇涓▼搴忥紝緇撴灉VC 2010澶翠竴嬈$艦宸ワ細銆<br />            cl: 鍛戒護琛?error D8027 :鏃犳硶鎵ц“E:\prog\vc2010\bin\c1xx.dll”<br />     涓婄綉鎼滅儲浜嗕笅錛屼篃娌℃壘鍒頒竴涓В鍐蟲柟娉曪紙<a >瀹樻柟璇存槑</a>錛夈傛閮侀椃鐫錛岀獊鐒墮棿鎯沖埌cl.exe鍙互姝e父榪愯錛岃宑1xx.dll涓嶈兘姝e父榪愯錛屼細涓嶄細鏄痗1xx.dll鐨勪緷璧栧簱鍑洪棶棰樹簡錛屼簬鏄皟鍑篸ependency涓鏌ワ紝鏋滅劧灝戜簡涓猰svcp100.dll錛堜及璁℃槸鏌愪釜鍗歌澆杞歡閫犳垚鐨勶級錛屼粠鍒鎷瘋礉涓涓埌bin鐩綍錛岄棶棰樿В鍐熾?br /></div><img src ="http://www.shnenglu.com/flyinghearts/aggbug/151417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2011-07-19 22:07 <a href="http://www.shnenglu.com/flyinghearts/archive/2011/07/19/151417.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐢╝sio浼犳枃浠?/title><link>http://www.shnenglu.com/flyinghearts/archive/2011/07/07/150421.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Thu, 07 Jul 2011 15:01:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2011/07/07/150421.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/150421.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2011/07/07/150421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/150421.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/150421.html</trackback:ping><description><![CDATA[<div><p>    鐪嬩簡鍑犲ぉasio鏂囨。錛屾葷畻鍙互鍐欑偣灝忕▼搴忎簡銆傛湁浜涚粏鑺傝繕鏄病寮勬槑鐧斤紝鍚屾IO濂藉儚榪樹笉鑳借瓚呮椂錛熸湇鍔″櫒绔噰鐢ㄥ紓姝O錛屽鎴風鍒欓噰鐢ㄥ悓姝O銆備紶閫佹枃浠訛紝涓嶅緱涓嶆敞鎰忓埌 C/C++ 2G鏂囦歡闄愬埗錛屽ソ鍍忔病閫氱敤鐨勮В鍐蟲柟娉曘?br /></p><p> </p><p>鍏堝畾涔変笅澶存枃浠訛紝緇熶竴涓媋sio鍜宐oost_asio銆?/p></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;"><br />#ifndef _FILE_INFO_H_<br /></span><span style="color: #0000ff;">#define</span><span style="color: #000000;"> _FILE_INFO_H_</span><span style="color: #000000;"><br /><br />  </span><span style="color: #0000ff;">#if</span><span style="color: #000000;"> USE_ASIO_ALONE</span><span style="color: #000000;"><br />    #include </span><span style="color: #000000;"><</span><span style="color: #000000;">asio.hpp</span><span style="color: #000000;">></span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;">#else</span><span style="color: #000000;"><br />    #include </span><span style="color: #000000;"><</span><span style="color: #000000;">boost</span><span style="color: #000000;">/</span><span style="color: #000000;">asio.hpp</span><span style="color: #000000;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> asio {<br />      </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> boost::asio;<br />      </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> boost::system::error_code;<br />    }<br />  </span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br />  <br />  </span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> File_info {<br />    typedef unsigned </span><span style="color: #0000ff;">long</span><span style="color: #000000;"> </span><span style="color: #0000ff;">long</span><span style="color: #000000;"> Size_type;<br />    Size_type filesize;<br />    size_t filename_size;<br />    File_info() : filesize(</span><span style="color: #000000;">0</span><span style="color: #000000;">), filename_size(</span><span style="color: #000000;">0</span><span style="color: #000000;">) {}<br />  };<br />  <br /></span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br /></span></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><img id="Code_Closed_Image_230019" onclick="this.style.display='none'; Code_Closed_Text_230019.style.display='none'; Code_Open_Image_230019.style.display='inline'; Code_Open_Text_230019.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_230019" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_230019.style.display='none'; Code_Closed_Image_230019.style.display='inline'; Code_Closed_Text_230019.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span id="Code_Closed_Text_230019" style="border: 1px solid #808080; background-color: #ffffff;">client_sender</span><span id="Code_Open_Text_230019" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;"><br /></span><span style="color: #008000;">//</span><span style="color: #008000;">www.cnblogs.com/flyinghearts</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;"><</span><span style="color: #000000;">iostream</span><span style="color: #000000;">></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;"><</span><span style="color: #000000;">cstdio</span><span style="color: #000000;">></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;"><</span><span style="color: #000000;">cstring</span><span style="color: #000000;">></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;"><</span><span style="color: #000000;">boost</span><span style="color: #000000;">/</span><span style="color: #000000;">shared_ptr.hpp</span><span style="color: #000000;">></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;">"</span><span style="color: #000000;">file_info.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br /><br /><br /></span><span style="color: #0000ff;">void</span><span style="color: #000000;"> sender(asio::io_service</span><span style="color: #000000;">&</span><span style="color: #000000;"> io, </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> ip_address, unsigned port, </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> filename)<br />{<br />  typedef asio::ip::tcp TCP;<br />  <br />  FILE </span><span style="color: #000000;">*</span><span style="color: #000000;">fp </span><span style="color: #000000;">=</span><span style="color: #000000;"> fopen(filename, </span><span style="color: #000000;">"</span><span style="color: #000000;">rb</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />  </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (fp </span><span style="color: #000000;">==</span><span style="color: #000000;"> NULL) {<br />    std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">cannot open file\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />    </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />  }<br />  <br />  </span><span style="color: #008000;">//</span><span style="color: #008000;">浣跨敤鏅鴻兘鎸囬拡錛岄槻姝㈢▼搴忓嚭鐜板紓甯告椂錛宖close鏈璋冪敤銆?/span><span style="color: #008000;"><br /></span><span style="color: #000000;">  boost::shared_ptr</span><span style="color: #000000;"><</span><span style="color: #000000;">FILE</span><span style="color: #000000;">></span><span style="color: #000000;"> file_ptr(fp, fclose);<br />  <br />  clock_t cost_time </span><span style="color: #000000;">=</span><span style="color: #000000;"> clock();<br />  <br />  </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> size_t k_buffer_size </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">32</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;"> </span><span style="color: #000000;">1024</span><span style="color: #000000;">;<br />  </span><span style="color: #0000ff;">char</span><span style="color: #000000;"> buffer[k_buffer_size];<br />  File_info file_info;<br />  <br />  </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> filename_size  </span><span style="color: #000000;">=</span><span style="color: #000000;"> strlen(filename) </span><span style="color: #000000;">+</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />  size_t file_info_size </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(file_info);<br />  size_t total_size </span><span style="color: #000000;">=</span><span style="color: #000000;"> file_info_size </span><span style="color: #000000;">+</span><span style="color: #000000;"> filename_size;<br />  </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (total_size </span><span style="color: #000000;">></span><span style="color: #000000;"> k_buffer_size) {<br />    std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">File name is too long</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />    </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />  }<br />  file_info.filename_size </span><span style="color: #000000;">=</span><span style="color: #000000;"> filename_size;<br />  <br />  fseek(fp, </span><span style="color: #000000;">0</span><span style="color: #000000;">, SEEK_END);<br />  file_info.filesize </span><span style="color: #000000;">=</span><span style="color: #000000;"> ftell(fp);<br />  rewind(fp);<br /><br />  memcpy(buffer, </span><span style="color: #000000;">&</span><span style="color: #000000;">file_info, file_info_size);<br />  memcpy(buffer </span><span style="color: #000000;">+</span><span style="color: #000000;"> file_info_size, filename, filename_size);<br /><br />  TCP::socket socket(io);<br />  socket.connect(TCP::endpoint(asio::ip::address_v4::from_string(ip_address), port));<br />  <br />  std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">Sending file : </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> filename </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />  size_t len </span><span style="color: #000000;">=</span><span style="color: #000000;"> total_size;<br />  unsigned </span><span style="color: #0000ff;">long</span><span style="color: #000000;"> </span><span style="color: #0000ff;">long</span><span style="color: #000000;"> total_bytes_read </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />  </span><span style="color: #0000ff;">while</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">true</span><span style="color: #000000;">) {<br />    socket.send(asio::buffer(buffer, len), </span><span style="color: #000000;">0</span><span style="color: #000000;">);<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (feof(fp)) </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br />    len </span><span style="color: #000000;">=</span><span style="color: #000000;"> fread(buffer, </span><span style="color: #000000;">1</span><span style="color: #000000;">, k_buffer_size, fp);<br />    total_bytes_read </span><span style="color: #000000;">+=</span><span style="color: #000000;"> len;<br />  }<br />  <br />  cost_time </span><span style="color: #000000;">=</span><span style="color: #000000;"> clock() </span><span style="color: #000000;">-</span><span style="color: #000000;"> cost_time;<br />  </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (cost_time </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">) cost_time </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />  </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> speed </span><span style="color: #000000;">=</span><span style="color: #000000;"> total_bytes_read </span><span style="color: #000000;">*</span><span style="color: #000000;"> (CLOCKS_PER_SEC </span><span style="color: #000000;">/</span><span style="color: #000000;"> </span><span style="color: #000000;">1024.0</span><span style="color: #000000;"> </span><span style="color: #000000;">/</span><span style="color: #000000;"> </span><span style="color: #000000;">1024.0</span><span style="color: #000000;">) </span><span style="color: #000000;">/</span><span style="color: #000000;"> cost_time;<br />  std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">cost time: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> cost_time </span><span style="color: #000000;">/</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">double</span><span style="color: #000000;">) CLOCKS_PER_SEC  </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;"> s </span><span style="color: #000000;">"</span><span style="color: #000000;"> <br />    </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">  transferred_bytes: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> total_bytes_read </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;"> bytes\n</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />    </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">speed: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;">  speed </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;"> MB/s\n\n</span><span style="color: #000000;">"</span><span style="color: #000000;">; <br />}<br /><br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> args, </span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> argc[])<br />{<br />  </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (args </span><span style="color: #000000;"><</span><span style="color: #000000;"> </span><span style="color: #000000;">3</span><span style="color: #000000;">) {<br />    std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">Usage: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> argc[</span><span style="color: #000000;">0</span><span style="color: #000000;">] </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;"> ip_address  filename1 filename2 <img src="http://www.shnenglu.com/Images/dot.gif" alt="" />\n</span><span style="color: #000000;">"</span><span style="color: #000000;">; <br />    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />  }<br />  <br />  asio::io_service io;<br />  </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">2</span><span style="color: #000000;">; i </span><span style="color: #000000;"><</span><span style="color: #000000;"> args; </span><span style="color: #000000;">++</span><span style="color: #000000;">i) {<br />    </span><span style="color: #0000ff;">try</span><span style="color: #000000;"> { sender(io, argc[</span><span style="color: #000000;">1</span><span style="color: #000000;">], </span><span style="color: #000000;">1345</span><span style="color: #000000;">, argc[i]); }<br />    </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (std::exception</span><span style="color: #000000;">&</span><span style="color: #000000;"> err) {<br />      std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;"> err.what() </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />    }<br />  }<br />}<br /><br /></span></span></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><img id="Code_Closed_Image_230056" onclick="this.style.display='none'; Code_Closed_Text_230056.style.display='none'; Code_Open_Image_230056.style.display='inline'; Code_Open_Text_230056.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_230056" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_230056.style.display='none'; Code_Closed_Image_230056.style.display='inline'; Code_Closed_Text_230056.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span id="Code_Closed_Text_230056" style="border: 1px solid #808080; background-color: #ffffff;">server_receiver</span><span id="Code_Open_Text_230056" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;"><br /></span><span style="color: #008000;">//</span><span style="color: #008000;">www.cnblogs.com/flyinghearts</span><span style="color: #008000;"><br /></span><span style="color: #000000;">#include </span><span style="color: #000000;"><</span><span style="color: #000000;">iostream</span><span style="color: #000000;">></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;"><</span><span style="color: #000000;">cstdio</span><span style="color: #000000;">></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;"><</span><span style="color: #000000;">boost</span><span style="color: #000000;">/</span><span style="color: #000000;">bind.hpp</span><span style="color: #000000;">></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;"><</span><span style="color: #000000;">boost</span><span style="color: #000000;">/</span><span style="color: #000000;">shared_ptr.hpp</span><span style="color: #000000;">></span><span style="color: #000000;"><br />#include </span><span style="color: #000000;"><</span><span style="color: #000000;">boost</span><span style="color: #000000;">/</span><span style="color: #000000;">enable_shared_from_this.hpp</span><span style="color: #000000;">></span><span style="color: #000000;"><br /><br />#include </span><span style="color: #000000;">"</span><span style="color: #000000;">file_info.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br /><br /></span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Session : </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> boost::enable_shared_from_this</span><span style="color: #000000;"><</span><span style="color: #000000;">Session</span><span style="color: #000000;">></span><span style="color: #000000;"> {<br /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br />  typedef asio::ip::tcp TCP;<br />  typedef asio::error_code Error; <br />  typedef boost::shared_ptr</span><span style="color: #000000;"><</span><span style="color: #000000;">Session</span><span style="color: #000000;">></span><span style="color: #000000;"> Pointer;<br />  typedef File_info::Size_type Size_type;<br />  <br />  </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> print_asio_error(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> Error</span><span style="color: #000000;">&</span><span style="color: #000000;"> error) { std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;"> error.message() </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;}<br />  <br />  </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> Pointer create(asio::io_service</span><span style="color: #000000;">&</span><span style="color: #000000;"> io) { </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> Pointer(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Session(io));}<br />  <br />  TCP::socket</span><span style="color: #000000;">&</span><span style="color: #000000;"> socket() { </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> socket_; }<br />  <br />  </span><span style="color: #000000;">~</span><span style="color: #000000;">Session() <br />  {<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (fp_) fclose(fp_);<br />    clock_ </span><span style="color: #000000;">=</span><span style="color: #000000;"> clock() </span><span style="color: #000000;">-</span><span style="color: #000000;"> clock_;<br />    Size_type bytes_writen </span><span style="color: #000000;">=</span><span style="color: #000000;"> total_bytes_writen_;<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (clock_ </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">) clock_ </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />    </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> speed </span><span style="color: #000000;">=</span><span style="color: #000000;"> bytes_writen </span><span style="color: #000000;">*</span><span style="color: #000000;"> (CLOCKS_PER_SEC </span><span style="color: #000000;">/</span><span style="color: #000000;"> </span><span style="color: #000000;">1024.0</span><span style="color: #000000;"> </span><span style="color: #000000;">/</span><span style="color: #000000;"> </span><span style="color: #000000;">1024.0</span><span style="color: #000000;">) </span><span style="color: #000000;">/</span><span style="color: #000000;"> clock_ ;<br />    std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">cost time: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> clock_ </span><span style="color: #000000;">/</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">double</span><span style="color: #000000;">) CLOCKS_PER_SEC </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;"> s  </span><span style="color: #000000;">"</span><span style="color: #000000;"> <br />       </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">bytes_writen: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> bytes_writen </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;"> bytes\n</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />       </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">speed: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;">  speed </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;"> MB/s\n\n</span><span style="color: #000000;">"</span><span style="color: #000000;">; <br />  }<br />  <br />  </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> start()<br />  {<br />    clock_ </span><span style="color: #000000;">=</span><span style="color: #000000;"> clock();<br />    std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">client: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> socket_.remote_endpoint().address() </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />    socket_.async_receive(<br />      asio::buffer(reinterpret_cast</span><span style="color: #000000;"><</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*></span><span style="color: #000000;">(</span><span style="color: #000000;">&</span><span style="color: #000000;">file_info_), </span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(file_info_)),<br />      boost::bind(</span><span style="color: #000000;">&</span><span style="color: #000000;">Session::handle_header, shared_from_this(), asio::placeholders::error)); <br />  }<br />  <br /></span><span style="color: #0000ff;">private</span><span style="color: #000000;">:<br />  Session(asio::io_service</span><span style="color: #000000;">&</span><span style="color: #000000;"> io) : socket_(io), fp_(NULL), total_bytes_writen_(</span><span style="color: #000000;">0</span><span style="color: #000000;">) { }<br />  <br />  </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> handle_header(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> Error</span><span style="color: #000000;">&</span><span style="color: #000000;"> error) <br />  {<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (error) </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> print_asio_error(error);<br />    size_t filename_size </span><span style="color: #000000;">=</span><span style="color: #000000;"> file_info_.filename_size;<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (filename_size </span><span style="color: #000000;">></span><span style="color: #000000;"> k_buffer_size) {<br />      std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">Path name is too long!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />      </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />    }<br />    </span><span style="color: #008000;">//</span><span style="color: #008000;">寰楃敤async_read, 涓嶈兘鐢╝sync_read_some錛岄槻姝㈣礬寰勫悕瓚呴暱鏃訛紝涓嬈℃帴鏀朵笉瀹?/span><span style="color: #008000;"><br /></span><span style="color: #000000;">    asio::async_read(socket_, asio::buffer(buffer_, file_info_.filename_size),<br />      boost::bind(</span><span style="color: #000000;">&</span><span style="color: #000000;">Session::handle_file, shared_from_this(), asio::placeholders::error)); <br />  }<br />  <br />  </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> handle_file(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> Error</span><span style="color: #000000;">&</span><span style="color: #000000;"> error)<br />  {<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (error) </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> print_asio_error(error);<br />    </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">char</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;">basename </span><span style="color: #000000;">=</span><span style="color: #000000;"> buffer_ </span><span style="color: #000000;">+</span><span style="color: #000000;"> file_info_.filename_size </span><span style="color: #000000;">-</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />    </span><span style="color: #0000ff;">while</span><span style="color: #000000;"> (basename </span><span style="color: #000000;">>=</span><span style="color: #000000;"> buffer_ </span><span style="color: #000000;">&&</span><span style="color: #000000;"> (</span><span style="color: #000000;">*</span><span style="color: #000000;">basename </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">\\</span><span style="color: #000000;">'</span><span style="color: #000000;"> </span><span style="color: #000000;">&&</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;">basename </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">/</span><span style="color: #000000;">'</span><span style="color: #000000;">)) </span><span style="color: #000000;">--</span><span style="color: #000000;">basename;<br />    </span><span style="color: #000000;">++</span><span style="color: #000000;">basename;<br />    <br />    std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">Open file: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> basename </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;"> (</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> buffer_ </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">)\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />    <br />    fp_ </span><span style="color: #000000;">=</span><span style="color: #000000;"> fopen(basename, </span><span style="color: #000000;">"</span><span style="color: #000000;">wb</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (fp_ </span><span style="color: #000000;">==</span><span style="color: #000000;"> NULL) {<br />      std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">Failed to open file to write\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />      </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />    }<br />    receive_file_content();<br />  }<br />  <br />  </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> receive_file_content()<br />  {<br />    socket_.async_receive(asio::buffer(buffer_, k_buffer_size), <br />      boost::bind(</span><span style="color: #000000;">&</span><span style="color: #000000;">Session::handle_write, shared_from_this(), asio::placeholders::error,<br />        asio::placeholders::bytes_transferred)); <br />  }<br />  <br />  </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> handle_write(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> Error</span><span style="color: #000000;">&</span><span style="color: #000000;"> error, size_t bytes_transferred)<br />  {<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (error) {<br />      </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (error </span><span style="color: #000000;">!=</span><span style="color: #000000;"> asio::error::eof) </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> print_asio_error(error);<br />      Size_type filesize </span><span style="color: #000000;">=</span><span style="color: #000000;"> file_info_.filesize;<br />      </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (total_bytes_writen_ </span><span style="color: #000000;">!=</span><span style="color: #000000;"> filesize) <br />          std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;">  </span><span style="color: #000000;">"</span><span style="color: #000000;">Filesize not matched! </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> total_bytes_writen_ <br />            </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> filesize </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />      </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;     <br />    }  <br />    total_bytes_writen_ </span><span style="color: #000000;">+=</span><span style="color: #000000;"> fwrite(buffer_, </span><span style="color: #000000;">1</span><span style="color: #000000;">, bytes_transferred, fp_);<br />    receive_file_content();<br />  }<br />  <br />  clock_t clock_;<br />  TCP::socket socket_;<br />  FILE </span><span style="color: #000000;">*</span><span style="color: #000000;">fp_;<br />  File_info file_info_;<br />  Size_type total_bytes_writen_;<br />  </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> unsigned k_buffer_size </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">1024</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;"> </span><span style="color: #000000;">32</span><span style="color: #000000;">;<br />  </span><span style="color: #0000ff;">char</span><span style="color: #000000;"> buffer_[k_buffer_size];<br />};<br /><br /></span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Tcp_server<br />{<br /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br />  typedef asio::ip::tcp TCP;<br />  typedef asio::error_code Error;<br />  <br />  Tcp_server(asio::io_service</span><span style="color: #000000;">&</span><span style="color: #000000;"> io, unsigned port) : <br />      acceptor_(io, TCP::endpoint(TCP::v4(), port))<br />  {<br />    start_accept();<br />  }<br /><br />  </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> print_asio_error(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> Error</span><span style="color: #000000;">&</span><span style="color: #000000;"> error) { std::cerr </span><span style="color: #000000;"><<</span><span style="color: #000000;"> error.message() </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;}<br /><br /></span><span style="color: #0000ff;">private</span><span style="color: #000000;">:<br />  </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> start_accept()<br />  {<br />    Session::Pointer session </span><span style="color: #000000;">=</span><span style="color: #000000;"> Session::create(acceptor_.get_io_service());<br />    acceptor_.async_accept(session</span><span style="color: #000000;">-></span><span style="color: #000000;">socket(),<br />      boost::bind(</span><span style="color: #000000;">&</span><span style="color: #000000;">Tcp_server::handle_accept, </span><span style="color: #0000ff;">this</span><span style="color: #000000;">, session, asio::placeholders::error));<br />  }<br />  <br />  </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> handle_accept(Session::Pointer session, </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> Error</span><span style="color: #000000;">&</span><span style="color: #000000;"> error)<br />  {<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (error) </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> print_asio_error(error);<br />    session</span><span style="color: #000000;">-></span><span style="color: #000000;">start();<br />    start_accept();<br />  }<br />  <br />  TCP::acceptor acceptor_;<br />};<br /><br /><br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br />{<br />  std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">Auto receive files and save then in current directory.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />  asio::io_service io;<br />  Tcp_server receiver(io, </span><span style="color: #000000;">1345</span><span style="color: #000000;">);  <br />  io.run();<br />}<br /><br /></span></span></div><img src ="http://www.shnenglu.com/flyinghearts/aggbug/150421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2011-07-07 23:01 <a href="http://www.shnenglu.com/flyinghearts/archive/2011/07/07/150421.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鏁扮粍宸︽棆杞琸浣?鈥斺?C++鏍囧噯綆楁硶搴撲腑鏈鎮插墽鐨勫嚱鏁幫細rotatehttp://www.shnenglu.com/flyinghearts/archive/2011/05/27/147403.htmlflyingheartsflyingheartsFri, 27 May 2011 13:04:00 GMThttp://www.shnenglu.com/flyinghearts/archive/2011/05/27/147403.htmlhttp://www.shnenglu.com/flyinghearts/comments/147403.htmlhttp://www.shnenglu.com/flyinghearts/archive/2011/05/27/147403.html#Feedback2http://www.shnenglu.com/flyinghearts/comments/commentRss/147403.htmlhttp://www.shnenglu.com/flyinghearts/services/trackbacks/147403.html

瑕佸皢涓涓暟緇勭殑鎵鏈夊厓绱犲悜宸︽棆杞?/span>k浣嶏紝閫氬父鏈変笁縐嶇畻娉曪細

 

綆楁硶1錛?/span>鍒嗙粍浜ゆ崲錛夛細

鑻闀垮害澶т簬b錛屽皢ab鍒嗘垚a0a1b錛屼氦鎹0鍜宐錛屽緱ba1a0錛屽彧闇鍐嶄氦鎹1 鍜宎0銆?/span>

鑻闀垮害灝忎簬b錛屽皢ab鍒嗘垚ab0b1錛屼氦鎹鍜宐0錛屽緱b0ab1錛屽彧闇鍐嶄氦鎹 鍜宐1銆?/span>

涓嶆柇灝嗘暟緇勫垝鍒嗗拰浜ゆ崲錛岀洿鍒頒笉鑳藉啀鍒掑垎涓烘銆傚垎緇勮繃紼嬩笌姹傛渶澶у叕綰︽暟寰堢浉浼箋?/span>

 璇誨啓鍐呭瓨鍚?n鍒?*n嬈?/span>

 

綆楁硶2 (涓夋鍙嶈漿)

鍒╃敤ba=(br)r(ar)r=(arbr)r錛屽厛鍒嗗埆鍙嶈漿a銆乥錛屾渶鍚庡啀瀵規墍鏈夊厓绱犺繘琛屼竴嬈″弽杞?/span>

璇誨啓鍐呭瓨鍚勭害2*n嬈?/span>

 

綆楁硶3 錛堜嬌鐢ㄥ驚鐜摼錛?/span>

鍋囪 n銆乲鐨勬渶澶у叕綰︽暟涓篗錛屽垯鎵鏈夊簭鍙蜂負 (i + j*k) % n (0<= i < M, 0 <= j < n/M)鐨勫厓绱狅紝鏋勬垚M涓驚鐜摼錛坕鍊肩浉鍚岀殑鍦ㄥ悓涓涓驚鐜摼涓婏級錛?姣忎釜寰幆閾句笂鐨勫厓绱犵Щ鍔ㄥ埌鍓嶄竴涓厓绱犵殑鍏冪礌錛屽氨鍙互浜ゆ崲鍒版渶緇堢粨鏋滀笂鐨勪綅緗紝鍥犺屾誨叡鍙璇誨啓鍐呭瓨鍚刵嬈°傦紙姣斿錛?1 2 3 4 5 6錛屽乏縐?浣嶏紝 1 3 5 鍜?2 4 6鍒嗗埆鏋勬垚涓や釜寰幆閾俱傦級

 

浜嬪疄涓?/span>C++鏍囧噯綆楁硶搴撴彁渚涗簡鐜版垚鐨勫嚱鏁幫細rotate鍑芥暟銆傛寜鐞嗚錛屽嚑縐嶇畻娉曢兘姣旇緝綆鍗曪紝緙栬瘧鍣ㄧ殑搴撳嚱鏁板張鏄粡榪囨椂闂存楠岀殑錛屾晥鐜囧嵆浣挎瘮鎵嬪啓鐨勫樊錛屼篃涓嶄細宸お澶氥備絾濡傛灉瀵?/span>rotate鍑芥暟榪涜嫻嬭瘯鐨勮瘽錛屽彲鑳戒細鍙戠幇鏍囧噯搴撶殑鐗堟湰鎱㈠緱鍙笉鏄竴鐐圭偣銆?/span>

瀵?/span>VC 2010錛岃繍琛屽悗闈㈢殑嫻嬭瘯紼嬪簭錛岃嚜瀹氫箟鍑芥暟錛堥噰鐢ㄧ畻娉?/span>2錛夎鐢?/span>99ms錛岃?/span>std::rotate鍗磋1656ms銆傛槸搴撶殑瀹炵幇鑰呬笉鎳傚緱鐢ㄨ繖涓畝鍗曠殑綆楁硶鍚楋紵媯鏌ヤ笅搴撶殑婧愪唬鐮侊紝灝變細鍙戠幇錛氭爣鍑嗙畻娉曞簱涓紝瀵?/span>C++鐨勪笁縐嶈凱浠e櫒錛堝墠鍚戣凱浠e櫒銆佸弻鍚戣凱浠e櫒錛岄殢鏈鴻闂凱浠e櫒錛夛紝鍒嗗埆閲囩敤浜嗕笂闈笁縐嶇畻娉曘傜洿鎺ヨ皟鐢ㄥ叾鍐呴儴鐨勫疄鐜幫紙std::_Rotat鍑芥暟錛夛紝閲嶆柊嫻嬭瘯涓嬶紝鍙緱鍒頒笅闈㈢粨鏋滐細

 

榪唬鍣?/span>

鍓嶅悜錛堢畻娉?/span>1錛?/span>

鍙屽悜錛堢畻娉?/span>2錛?/span>

闅忔満璁塊棶錛堢畻娉?/span>3錛?/span>

鏃墮棿錛?/span>ms錛?/span>

46

99

1651

        錛堜嬌鐢?/span>GCC鐨勶紝璇風敤鐗堟湰鍙蜂綆浜?/span>4.5鐨勮繘琛屾祴璇曪級

 

    浠庣粨鏋滃彲浠ョ湅鍑猴紝鏁堢巼鏄細綆楁硶1 > 綆楁硶2 >>> 綆楁硶3銆?/span> 

 

浠庣悊璁轟笂璁詫紝綆楁硶3鍙璇誨啓鍐呭瓨鍚?/span>n嬈★紝搴旇鏄晥鐜囨渶楂樼殑綆楁硶銆傝繖鍦ㄦ瘡嬈″唴瀛樿鍐欑殑寮閿鐩稿樊涓嶅ぇ鏃舵垚绔嬨備絾瀹為檯涓婏紝鐢變簬紜歡闄愬埗錛?/span>CPU瀵瑰唴瀛樼殑璁塊棶閲囩敤鍒嗙駭緙撳瓨鏈哄埗錛氫竴綰х紦瀛樺閲忓緢灝忎絾璁塊棶閫熷害鏈蹇紝瀛樻斁紼嬪簭鐨勬寚浠ゅ拰鏈甯哥敤鐨勬暟鎹紝鑰屼簩銆佷笁綰х紦瀛樺閲忚緝澶т絾璁塊棶閫熷害瑕佹參寰堝銆?/span>CPU鏄棤娉曠粫榪囩紦瀛樼洿鎺ヨ闂唴瀛樻暟鎹紙鏌愪簺鐗規畩鎸囦護鍙互涓嶇敤涓浜屼笁綰х紦瀛橈紝浣嗗畠涔熻鐢ㄥ埌鍏跺畠涓撶敤緙撳瓨錛夛紝瀵逛笉鍦ㄧ紦瀛樹腑鐨勬暟鎹紝蹇呴』鍏堣澆鍏ュ埌緙撳瓨涓紝榪欎釜鎿嶄綔鏄浉褰撴槀璐電殑銆傚澶ф暟緇勬潵璇達紝涓嶅彲鑳藉皢鎵鏈夋暟鎹兘瀛樻斁鍦ㄧ紦瀛樹腑錛岃屽鍐呭瓨鐨勪笉榪炵畫璁塊棶錛?/span>CPU瀵瑰唴瀛樺畾浣嶇殑寮閿錛堝悇綰х紦瀛橀棿鏁版嵁鐨勮皟鏁達紝鍙嶅縐誨叆鎴栫Щ鍑烘暟鎹埌緙撳瓨錛夋槸宸ㄥぇ鐨勶紝榪欏氨閫犳垚浜嗙畻娉?/span>3鐨勬ц兘鍦ㄨ鎯呭喌涓嬮潪甯稿樊銆傛祴璇曞彂鐜幫紝k = 3鏃訛紝璇ョ畻娉曠殑鏁堢巼灝卞凡緇忕浉褰撳樊浜嗐傚灝忔暟緇勶紝灝界璇ョ畻娉曡鍐欐鏁板皯錛屼絾鐢變簬鍚勭綆楁硶鎵鐢ㄦ椂闂撮兘寰堝皬錛岃繖縐嶄紭鍔垮緢闅句綋鐜板嚭鏉ャ傚彲浠ヨ錛?strong>綆楁硶3鍦ㄦ暟瀛︿笂鏄潪甯鎬紭緹庣殑錛屼絾鏄湪瀹為檯搴旂敤涓紝鏄竴縐嶇浉褰撳樊鐨勭畻娉曘?/span>

瀵圭畻娉曠殑閫夋嫨錛屼笉搴旇蹇借鍐呭瓨鍥犵礌銆?/span>鍦ㄥ闅忔満璁塊棶榪唬鍣ㄧ増鏈殑roate瀹炵幇涓婄姱榪欎釜閿欒鐨勶紝鍙笉浠呬粎鏄?/span>VC錛岃繕鏈夎憲鍚嶇殑STL Port銆?/span>GCC錛?/span>GCC浠?/span>4.5寮濮?/span>libstdc++鏀圭敤綆楁硶1錛屽茍鍋氫簡浜涗紭鍖栵級錛屼互鍙婃柊鍏寸殑libc++銆傦紙鍏跺畠鐨勭紪璇戝櫒/搴撴病鐢ㄨ繃錛屼篃灝辨病鏈夋祴璇曘傦級

 

鍙﹀錛屾祴璇曟椂鍙戠幇VC 2010鐨勪竴涓?/span>bug錛氬墠鍚戣凱浠e櫒鐨勫疄鐜扮増鏈紝褰?/span>k = 0鏃訛紝紼嬪簭鐩存帴鎸備簡銆?/span>

 

嫻嬭瘯浠g爜錛?/p>


rotate


]]>
浠庡瓧絎︿覆涓彁鍙栨暟瀛楀茍鎺掑簭杈撳嚭http://www.shnenglu.com/flyinghearts/archive/2011/03/31/143167.htmlflyingheartsflyingheartsThu, 31 Mar 2011 15:56:00 GMThttp://www.shnenglu.com/flyinghearts/archive/2011/03/31/143167.htmlhttp://www.shnenglu.com/flyinghearts/comments/143167.htmlhttp://www.shnenglu.com/flyinghearts/archive/2011/03/31/143167.html#Feedback0http://www.shnenglu.com/flyinghearts/comments/commentRss/143167.htmlhttp://www.shnenglu.com/flyinghearts/services/trackbacks/143167.html闃呰鍏ㄦ枃

]]>
銆婄紪紼嬩箣緹庛嬭涔︾瑪璁?2錛? 1.16 24鐐規父鎴忥紙琛ュ厖錛?/title><link>http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123531.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Sun, 15 Aug 2010 15:35:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123531.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/123531.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/123531.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/123531.html</trackback:ping><description><![CDATA[     鎽樿: 銆婄紪紼嬩箣緹庛嬭涔︾瑪璁?2錛?nbsp;   1.16  24鐐規父鎴忥紙琛ュ厖錛?  緇欏畾n涓暟錛岃兘鍚﹀彧閫氳繃鍔犲噺涔橀櫎璁$畻寰楀埌24錛? 涔︿笂緇欏嚭鐨勬渶鍚庝竴縐嶈В娉曪紝閫氳繃浣跨敤闆嗗悎璁板綍涓棿緇撴灉鏉ュ噺灝戝啑浣欒綆椼傛湰浠ヤ負錛岀▼搴忎細鍗犵敤澶ч噺鐨勫唴瀛橈紝鐢ㄤ竴涓瀬绔殑渚嬪瓙錛?3, 773, 28, 98, 731, 1357,97357246榪?涓暟錛夋祴璇曚簡涓涓嬪疄鐜扮殑紼嬪簭錛屽彂鐜扮▼搴忕珶鐒?..  <a href='http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123531.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/flyinghearts/aggbug/123531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2010-08-15 23:35 <a href="http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123531.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>N涓暟璁$畻24鐐?/title><link>http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123529.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Sun, 15 Aug 2010 15:20:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123529.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/123529.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/123529.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/123529.html</trackback:ping><description><![CDATA[     鎽樿: N涓暟璁$畻24鐐?闂錛?    N涓?鍒?3涔嬮棿鐨勮嚜鐒舵暟錛屾壘鍑烘墍鏈夎兘閫氳繃鍔犲噺涔橀櫎璁$畻錛堟瘡涓暟鏈変笖鍙兘鐢ㄤ竴嬈★級寰楀埌24鐨勭粍鍚堬紵   璁$畻24鐐瑰父鐢ㄧ殑綆楁硶鏈夛細鈶?浠誨彇涓や釜鏁幫紝璁$畻鍚庯紝灝嗙粨鏋滄斁鍥炲幓錛屽啀浠庡墿涓嬬殑鏁頒腑浠誨彇涓や釜錛屽姝ゅ弽澶嶇洿鍒板彧鍓╀笅涓涓暟錛涒憽 鍏堟瀯寤哄墠緙/鍚庣紑琛ㄨ揪寮忥紝鍐嶈綆楄琛ㄨ揪寮忥紱鈶?鐢ㄩ泦鍚堜繚瀛樹腑闂寸粨鏋滐紝闆嗗悎闂翠袱涓よ繘琛屽悎騫惰綆楀緱鍒版柊闆嗗悎錛堟垨鑰呭...  <a href='http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123529.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/flyinghearts/aggbug/123529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2010-08-15 23:20 <a href="http://www.shnenglu.com/flyinghearts/archive/2010/08/15/123529.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆婄紪紼嬩箣緹庛嬭涔︾瑪璁?2錛? 1.16 24鐐規父鎴?/title><link>http://www.shnenglu.com/flyinghearts/archive/2010/08/01/121907.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Sun, 01 Aug 2010 14:50:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2010/08/01/121907.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/121907.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2010/08/01/121907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/121907.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/121907.html</trackback:ping><description><![CDATA[     鎽樿: 銆婄紪紼嬩箣緹庛嬭涔︾瑪璁?2錛?nbsp;   1.16  24鐐規父鎴? 緇欏畾4涓暟錛岃兘鍚﹀彧閫氳繃鍔犲噺涔橀櫎璁$畻寰楀埌24錛熺敱浜庡彧鏈?涓暟錛屽紕涓閲嶅驚鐜紝灝卞彲浠ャ傚鏋滆鎺ㄥ箍鍒皀涓暟錛屾湁涓ょ鎬濊礬錛?鈶?閲囩敤鍓嶇紑/鍚庣紑琛ㄨ揪寮忋傜浉褰撲簬灝唍涓暟鐢╪-1涓嫭鍙鋒嫭璧鋒潵錛屽叾鏁扮洰灝辨槸涓涓猚atlan鏁般傛渶澶氬彲寰楀埌 f(n) = (1/n * (2*n - 2)! / (n-1)! / (...  <a href='http://www.shnenglu.com/flyinghearts/archive/2010/08/01/121907.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/flyinghearts/aggbug/121907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2010-08-01 22:50 <a href="http://www.shnenglu.com/flyinghearts/archive/2010/08/01/121907.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆婄紪紼嬩箣緹庛嬭涔︾瑪璁?1錛?2.4 1鐨勬暟鐩?/title><link>http://www.shnenglu.com/flyinghearts/archive/2010/07/21/120915.html</link><dc:creator>flyinghearts</dc:creator><author>flyinghearts</author><pubDate>Tue, 20 Jul 2010 16:25:00 GMT</pubDate><guid>http://www.shnenglu.com/flyinghearts/archive/2010/07/21/120915.html</guid><wfw:comment>http://www.shnenglu.com/flyinghearts/comments/120915.html</wfw:comment><comments>http://www.shnenglu.com/flyinghearts/archive/2010/07/21/120915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flyinghearts/comments/commentRss/120915.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flyinghearts/services/trackbacks/120915.html</trackback:ping><description><![CDATA[     鎽樿:  銆婄紪紼嬩箣緹庛嬭涔︾瑪璁?1錛?2.4 1鐨勬暟鐩?  闂錛?    緇欏畾涓涓崄榪涘埗姝f暣鏁癗錛屽啓涓嬩粠1寮濮嬶紝鍒癗鐨勬墍鏈夋暣鏁幫紝     鐒跺悗鏁頒竴涓嬪叾涓嚭鐜扮殑鎵鏈?#8220;1”鐨勪釜鏁般?     渚嬪錛?       ...  <a href='http://www.shnenglu.com/flyinghearts/archive/2010/07/21/120915.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/flyinghearts/aggbug/120915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flyinghearts/" target="_blank">flyinghearts</a> 2010-07-21 00:25 <a href="http://www.shnenglu.com/flyinghearts/archive/2010/07/21/120915.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.deografenny.com.cn" target="_blank">国产精品久久久久影视不卡</a>| <a href="http://www.sh-bz.com.cn" target="_blank">久久精品国产2020</a>| <a href="http://www.youk6.cn" target="_blank">久久99久久99小草精品免视看 </a>| <a href="http://www.sportssupport.cn" target="_blank">久久天天躁狠狠躁夜夜av浪潮</a>| <a href="http://www.px2s.cn" target="_blank">精产国品久久一二三产区区别 </a>| <a href="http://www.pocoho.cn" target="_blank">久久免费视频1</a>| <a href="http://www.pianjuan.cn" target="_blank">中文字幕久久欲求不满</a>| <a href="http://www.motorbook.com.cn" target="_blank">久久天天躁狠狠躁夜夜不卡</a>| <a href="http://www.seekme.com.cn" target="_blank">午夜精品久久久久久毛片</a>| <a href="http://www.yangfenghua.cn" target="_blank">欧美粉嫩小泬久久久久久久</a>| <a href="http://www.rsfrw.cn" target="_blank">久久国产热精品波多野结衣AV</a>| <a href="http://www.btclt.cn" target="_blank">久久精品国产精品亜洲毛片</a>| <a href="http://www.newdalu.cn" target="_blank">亚洲国产精品久久久天堂</a>| <a href="http://www.uugp.cn" target="_blank">欧洲精品久久久av无码电影</a>| <a href="http://www.wwwh0930com.cn" target="_blank">亚洲精品无码久久久</a>| <a href="http://www.yahooproxy.cn" target="_blank">国产精品伦理久久久久久 </a>| <a href="http://www.yksxc.cn" target="_blank">91超碰碰碰碰久久久久久综合</a>| <a href="http://www.156v7.cn" target="_blank">一级做a爰片久久毛片免费陪</a>| <a href="http://www.fuxingjiguang.cn" target="_blank">久久久久人妻一区精品性色av</a>| <a href="http://www.pophyh.cn" target="_blank">久久精品无码一区二区日韩AV</a>| <a href="http://www.xiangxiangren.cn" target="_blank">久久人人爽爽爽人久久久</a>| <a href="http://www.xinmeige.com.cn" target="_blank">久久久久亚洲爆乳少妇无</a>| <a href="http://www.shipin168.cn" target="_blank">好久久免费视频高清</a>| <a href="http://www.ht228.cn" target="_blank">亚洲va久久久噜噜噜久久</a>| <a href="http://www.567uu.cn" target="_blank">欧美精品福利视频一区二区三区久久久精品 </a>| <a href="http://www.cool45.cn" target="_blank">免费精品久久久久久中文字幕</a>| <a href="http://www.tomp3.cn" target="_blank">一级做a爱片久久毛片</a>| <a href="http://www.fu-shing.cn" target="_blank">无码人妻久久久一区二区三区</a>| <a href="http://www.huaiyangxian.cn" target="_blank">91精品国产91热久久久久福利 </a>| <a href="http://www.aikandianying.cn" target="_blank">久久人人爽人爽人人爽av</a>| <a href="http://www.dm233.cn" target="_blank">亚洲国产精品婷婷久久</a>| <a href="http://www.tprs.com.cn" target="_blank">久久精品国产精品亚洲毛片</a>| <a href="http://www.yuyuetiyu.cn" target="_blank">亚洲国产另类久久久精品黑人</a>| <a href="http://www.1webproxy.cn" target="_blank">久久乐国产精品亚洲综合</a>| <a href="http://www.0371trip.cn" target="_blank">国产三级观看久久</a>| <a href="http://www.yzlxdr.cn" target="_blank">91久久精品国产成人久久</a>| <a href="http://www.ehxs.cn" target="_blank">久久亚洲欧美日本精品</a>| <a href="http://www.sd43.cn" target="_blank">亚洲国产一成久久精品国产成人综合</a>| <a href="http://www.iscrip.cn" target="_blank">国产成人精品久久综合</a>| <a href="http://www.ckpic.com.cn" target="_blank">国产巨作麻豆欧美亚洲综合久久</a>| <a href="http://www.5o42i9.cn" 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>