锘??xml version="1.0" encoding="utf-8" standalone="yes"?> # 鍜?## 鎿嶄綔絎︽槸鍜?a href="mk:@MSITStore:E:\doc\C++%20璇█鍙傝?chm::/cppreference.com/preproc_details.html#define">#define瀹忎嬌鐢ㄧ殑. 浣跨敤# 浣垮湪#鍚庣殑棣栦釜鍙傛暟榪斿洖涓轟竴涓甫寮曞彿鐨勫瓧絎︿覆. 渚嬪, 鍛戒護 灝嗕細浣跨紪璇戝櫒鎶婁互涓嬪懡浠? 鐞嗚В涓? 浣跨敤##榪炵粨##鍓嶅悗鐨勫唴瀹? 渚嬪, 鍛戒護 灝嗕細浣跨紪璇戝櫒鎶? 瑙i噴涓? 鐞嗘墍褰撶劧,灝嗕細鍦ㄦ爣鍑嗚緭鍑哄鏄劇ず'10'. #line鍛戒護鏄敤浜庢洿鏀筥_LINE__ 鍜?__FILE__鍙橀噺鐨勫? 鏂囦歡鍚嶆槸鍙夌殑. __LINE__ 鍜?__FILE__ 鍙橀噺鎻忚堪琚鍙栫殑褰撳墠鏂囦歡鍜岃. 鍛戒護 鏇存敼琛屽彿涓?0,褰撳墠鏂囦歡鏀逛負"main.cpp". 璇硶:
棰勫鐞嗗懡浠?/h1>
#,##
#define to_string( s ) # s
cout << to_string( Hello World! ) << endl;
cout << "Hello World!" << endl;
#define concatenate( x, y ) x ## y
...
int xy = 10;
...
cout << concatenate( x, y ) << endl;
cout << xy << endl;
#line
璇硶:
#line line_number "filename"
#line 10 "main.cpp"
棰勫畾涔夊彉閲?/a>
__LINE__
__FILE__
__DATE__
__TIME__
_cplusplus
__STDC__
涓嬪垪鍙傛暟鍦ㄤ笉鍚岀殑緙栬瘧鍣ㄥ彲鑳戒細鏈夋墍涓嶅悓, 浣嗘槸涓鑸槸鍙敤鐨?
In an unsigned type, all the bits represent the value. If a type is defined for a particular machine to use 8 bits, then the unsigned version of this type could hold the values 0 through 255.
鏃犵鍙峰瀷涓紝鎵鏈夌殑浣嶉兘琛ㄧず鏁板箋傚鏋滃湪鏌愮鏈哄櫒涓紝瀹氫箟涓縐嶇被鍨嬩嬌鐢?8 浣嶈〃紺猴紝閭d箞榪欑綾誨瀷鐨? unsigned 鍨嬪彲浠ュ彇鍊?0 鍒?255銆?/p>
The C++ standard does not define how signed types are represented at the bit level. Instead, each compiler is free to decide how it will represent signed types. These representations can affect the range of values that a signed type can hold. We are guaranteed that an 8-bit signed type will hold at least the values from 127 through 127; many implementations allow values from 128 through 127.
C++ 鏍囧噯騫舵湭瀹氫箟 signed 綾誨瀷濡備綍鐢ㄤ綅鏉ヨ〃紺猴紝鑰屾槸鐢辨瘡涓紪璇戝櫒鑷敱鍐沖畾濡備綍琛ㄧず signed 綾誨瀷銆傝繖浜涜〃紺烘柟寮忎細褰卞搷 signed 綾誨瀷鐨勫彇鍊艱寖鍥淬? 浣?signed 綾誨瀷鐨勫彇鍊艱偗瀹氳嚦灝戞槸浠?-127 鍒?127錛屼絾涔熸湁璁稿瀹炵幇鍏佽鍙栧間粠 -128 鍒?127銆?/p>
Under the most common strategy for representing signed integral types, we can view one of the bits as a sign bit. Whenever the sign bit is 1, the value is negative; when it is 0, the value is either 0 or a positive number. An 8-bit integral signed type represented using a sign-bit can hold values from 128 through 127.
琛ㄧず signed 鏁村瀷綾誨瀷鏈甯歌鐨勭瓥鐣ユ槸鐢ㄥ叾涓竴涓綅浣滀負絎﹀彿浣嶃傜鍙蜂綅涓?1錛屽煎氨涓鴻礋鏁幫紱絎﹀彿浣嶄負 0錛屽煎氨涓?0 鎴栨鏁般備竴涓?signed 鏁村瀷鍙栧兼槸浠?-128 鍒?127銆?/p>
The type of an object determines the values that the object can hold. This fact raises the question of what happens when one tries to assign a value outside the allowable range to an object of a given type. The answer depends on whether the type is signed or unsigned.
瀵硅薄鐨勭被鍨嬪喅瀹氬璞$殑鍙栧箋傝繖浼氬紩璧蜂竴涓枒闂細褰撴垜浠瘯鐫鎶婁竴涓秴鍑哄叾鍙栧艱寖鍥寸殑鍊艱祴緇欎竴涓寚瀹氱被鍨嬬殑瀵硅薄鏃訛紝緇撴灉浼氭庢牱鍛紵絳旀鍙栧喅浜庤繖縐嶇被鍨嬫槸 signed 榪樻槸 unsigned 鐨勩?/p>
For unsigned types, the compiler must adjust the out-of-range value so that it will fit. The compiler does so by taking the remainder of the value modulo the number of distinct values the unsigned target type can hold. An object that is an 8-bit unsigned char, for example, can hold values from 0 through 255 inclusive. If we assign a value outside this range, the compiler actually assigns the remainder of the value modulo 256. For example, we might attempt to assign the value 336 to an 8-bit signed char. If we try to store 336 in our 8-bit unsigned char, the actual value assigned will be 80, because 80 is equal to 336 modulo 256.
瀵逛簬 unsigned 綾誨瀷鏉ヨ錛岀紪璇戝櫒蹇呴』璋冩暣瓚婄晫鍊間嬌鍏舵弧瓚寵姹傘傜紪璇戝櫒浼氬皢璇ュ煎 unsigned 綾誨瀷鐨勫彲鑳藉彇鍊兼暟鐩眰妯★紝鐒跺悗鍙栨墍寰楀箋傛瘮濡?8 浣嶇殑 unsigned char錛屽叾鍙栧艱寖鍥翠粠 0 鍒? 255錛堝寘鎷?255錛夈傚鏋滆祴緇欒秴鍑鴻繖涓寖鍥寸殑鍊鹼紝閭d箞緙栬瘧鍣ㄥ皢浼氬彇璇ュ煎 256 姹傛ā鍚庣殑鍊箋備緥濡傦紝濡傛灉璇曞浘灝?336 瀛樺偍鍒?8 浣嶇殑 unsigned char 涓紝鍒欏疄闄呰祴鍊間負 80錛屽洜涓?80 鏄?336 瀵?256 姹傛ā鍚庣殑鍊箋?/p>
For the unsigned types, a negative value is always out of range. An object of unsigned type may never hold a negative value. Some languages make it illegal to assign a negative value to an unsigned type, but C++ does not.
瀵逛簬 unsigned 綾誨瀷鏉ヨ錛岃礋鏁版繪槸瓚呭嚭鍏跺彇鍊艱寖鍥淬?tt>unsigned 綾誨瀷鐨勫璞″彲鑳芥案榪滀笉浼氫繚瀛樿礋鏁般傛湁浜涜璦涓皢璐熸暟璧嬬粰 unsigned 綾誨瀷鏄潪娉曠殑錛屼絾鍦?C++ 涓繖鏄悎娉曠殑銆?/p>
|
In C++ it is perfectly legal to assign a negative number to an object with unsigned type. The result is the negative value modulo the size of the type. So, if we assign 1 to an 8-bit unsigned char, the resulting value will be 255, which is 1 modulo 256. C++ 涓紝鎶婅礋鍊艱祴緇?unsigned 瀵硅薄鏄畬鍏ㄥ悎娉曠殑錛屽叾緇撴灉鏄璐熸暟瀵硅綾誨瀷鐨勫彇鍊間釜鏁版眰妯″悗鐨勫箋傛墍浠ワ紝濡傛灉鎶?-1 璧嬬粰8浣嶇殑 unsigned char錛岄偅涔堢粨鏋滄槸 255錛屽洜涓?255 鏄?-1 瀵?256 姹傛ā鍚庣殑鍊箋?/p> |
When assigning an out-of-range value to a signed type, it is up to the compiler to decide what value to assign. In practice, many compilers treat signed types similarly to how they are required to treat unsigned types. That is, they do the assignment as the remainder modulo the size of the type. However, we are not guaranteed that the compiler will do so for the signed types.
褰撳皢瓚呰繃鍙栧艱寖鍥寸殑鍊艱祴緇?signed 綾誨瀷鏃訛紝鐢辯紪璇戝櫒鍐沖畾瀹為檯璧嬬殑鍊箋傚湪瀹為檯鎿嶄綔涓紝寰堝鐨勭紪璇戝櫒澶勭悊 signed 綾誨瀷鐨勬柟寮忓拰 unsigned 綾誨瀷綾諱技銆備篃灝辨槸璇達紝璧嬪兼椂鏄彇璇ュ煎璇ョ被鍨嬪彇鍊兼暟鐩眰妯″悗鐨勫箋傜劧鑰屾垜浠笉鑳戒繚璇佺紪璇戝櫒閮戒細榪欐牱澶勭悊 signed 綾誨瀷銆?/p>
浠ヤ笂鎽樿嚜 c++ primer,鎯劎錛岃繕鏄啀緇嗙粏鐨勪粠澶村搧涓嬈¤繖涔﹀惂銆?br>
鎷瘋礉錛?br>
copy錛堬級
reverse_copy()
rotate_copy()
remove_copy() 鎷瘋礉涓嶇瓑浜庢煇鍊肩殑鍏冪礌鍒板彟涓涓簭鍒椼?br>remove_copy_if() 鎷瘋礉絎﹀悎鏉′歡鐨勫埌鍙︿竴涓簭鍒椼?/p>
濉厖鍜岀敓鎴愶細
fill()
fill_n() 濉厖搴忓垪涓殑n涓厓绱犮?br>generate錛堬級涓哄簭鍒椾腑鐨勬瘡涓厓绱犺皟鐢╣en錛堬級鍑芥暟銆?/p>
鎺掑垪錛?br>next_permuttion() 鍚庝竴涓帓鍒椼?br>prev_permutation()
partition() 鍒掑垎錛屽皢婊¤凍鏉′歡鐨勫厓绱犵Щ鍔ㄥ埌搴忓垪鐨勫墠闈€?br>stable_partition()
鏌ユ壘鍜屾浛鎹細
find錛堬級
binary_search() 鍦ㄤ竴涓凡緇忔湁欏哄簭鐨勫簭鍒椾笂鏌ユ壘銆?br>find_if()
search() 媯鏌ョ浜屼釜搴忓垪鏄惁鍦ㄧ涓涓簭鍒椾腑鍑虹幇錛屼笖欏哄簭鐩稿悓銆?/p>
鍒犻櫎錛氭敞鎰忓繀欏昏皟鐢╡rase錛堬級鏉ョ湡姝e垹闄?br>remove錛堬級
unique錛堬級鍒犻櫎鐩擱偦閲嶅鍏冪礌錛屾渶濂界幇鎺掑簭銆?/p>
鍚堝茍搴忓垪錛?br>merge錛堬級
鏁板肩畻娉曪細
accumulate錛堬級 瀵瑰簭鍒楃殑姣忎釜鍏冪礌榪涜榪愮畻鍚庢眰鍜屻?br>transform錛堬級 涔熷彲浠ュ姣忎釜鍏冪礌榪涜榪愮畻銆?br>璁℃暟錛?br>size錛堬級鎬諱釜鏁般?br>count錛堬級絳変簬鏌愬肩殑鍏冪礌涓暟銆?/p>
adjacent_difference 搴忓垪涓殑鍚庝竴涓噺鍓嶄笌浠栫浉閭葷殑鍓嶄竴涓緱鍒版柊鐨勫簭鍒椼?/p>
adiacent_find
accumlate 錛?/span> iterator 瀵規爣蹇楃殑搴忓垪涓殑鍏冪礌涔嬪拰錛屽姞鍒頒竴涓敱 init 鎸囧畾鐨勫垵濮嬪間笂銆傞噸杞界殑鐗堟湰涓嶅啀鍋氬姞娉曪紝鑰屾槸浼犺繘鏉ョ殑浜屽厓鎿嶄綔絎﹁搴旂敤鍒板厓绱犱笂銆?/span>
adjacent_different 錛氬垱寤轟竴涓柊搴忓垪錛岃搴忓垪鐨勬瘡涓柊鍊奸兘浠h〃浜嗗綋鍓嶅厓绱犱笌涓婁竴涓厓绱犵殑宸傞噸杞界増鏈敤鎸囧畾鐨勪簩鍏冩搷浣滆綆楃浉閭誨厓绱犵殑宸?/font>
adjacent_find 錛氬湪 iterator 瀵規爣蹇楃殑鍏冪礌鑼冨洿鍐咃紝鏌ユ壘涓瀵圭浉閭葷殑閲嶅鍏冪礌錛屽鏋滄壘鍒拌繑鍥炰竴涓?/span> ForwardIterator 錛屾寚鍚戣繖瀵瑰厓绱犵殑絎竴涓厓绱犮傚惁鍒欒繑鍥?/span> last 銆傞噸杞界増鏈嬌鐢ㄨ緭鍏ョ殑浜屽厓鎿嶄綔絎︿唬鏇跨浉絳夌殑鍒ゆ柇銆?/span>
binary_search 錛氬湪鏈夊簭搴忓垪涓煡鎵?/span> value 錛屽鏋滄壘鍒拌繑鍥?/span> true 銆傞噸杞界殑鐗堟湰浣跨敤鎸囧畾鐨勬瘮杈冨嚱鏁板璞℃垨鑰呭嚱鏁版寚閽堟潵鍒ゆ柇鐩哥瓑銆?/span>
copy 錛氬鍒跺簭鍒椼?/font>
copy_backward 錛氶櫎浜嗗厓绱犱互鐩稿弽鐨勯『搴忚鎷瘋礉澶栵紝鍒殑鍜?/span> copy 鐩稿悓銆?/span>
count 錛氬埄鐢ㄧ瓑浜庢搷浣滅錛屾妸鏍囧織鑼冨洿綾葷殑鍏冪礌涓庤緭鍏ョ殑鍊艱繘琛屾瘮杈冿紝騫惰繑鍥炵浉絳夊厓绱犵殑涓暟銆?/font>
count_if 錛氬浜庢爣蹇楄寖鍥寸被鐨勫厓绱狅紝搴旂敤杈撳叆鐨勬搷浣滅錛屽茍榪斿洖緇撴灉涓?/span> true 鐨勬鏁般?/span>
equal 錛氬鏋滀袱涓簭鍒楀湪鑼冨洿鍐呯殑鍏冪礌閮界浉絳夛紝鍒?/span> equal 榪斿洖 true 銆傞噸杞界増鏈嬌鐢ㄨ緭鍏ョ殑鎿嶄綔絎︿唬鏇夸簡榛樿鐨勭瓑浜庢搷浣滅銆?/span>
equal_range 錛氳繑鍥炰竴瀵?/span> iterator 錛岀涓涓?/span> iterator 琛ㄧず鐢?/span> lower_bound 榪斿洖鐨?/span> iterator 錛岀浜屼釜琛ㄧず鐢?/span> upper_bound 榪斿洖鐨?/span> iterator鍊箋?/span>
fill 錛氬皢杈撳叆鐨勫肩殑鎷瘋礉璧嬬粰鑼冨洿鍐呯殑姣忎釜鍏冪礌銆?/font>
fill_n 錛氬皢杈撳叆鐨勫艱祴鍊肩粰 first 鍒?/span> frist+n 鑼冨洿鍐呯殑鍏冪礌銆?/span>
find 錛氬埄鐢ㄥ簳灞傚厓绱犵殑絳変簬鎿嶄綔絎︼紝瀵硅寖鍥村唴鐨勫厓绱犱笌杈撳叆鐨勫艱繘琛屾瘮杈冦傚綋鍖歸厤鏃訛紝緇撴潫鎼滅儲錛岃繑鍥炶鍏冪礌鐨勪竴涓?/span> InputIterator 銆?/span>
find_if 錛氫嬌鐢ㄨ緭鍏ョ殑鍑芥暟鏇夸唬浜嗙瓑浜庢搷浣滅鎵ц浜?/span> find 銆?/span>
find_end 錛氬湪鑼冨洿鍐呮煡鎵?#8220;鐢辮緭鍏ョ殑鍙﹀涓涓?/span> iterator 瀵規爣蹇楃殑絎簩涓簭鍒?#8221;鐨勬渶鍚庝竴嬈″嚭鐜般傞噸杞界増鏈腑浣跨敤浜嗙敤鎴瘋緭鍏ョ殑鎿嶄綔絎︽浛浠g瓑浜庢搷浣溿?/span>
find_first_of 錛氬湪鑼冨洿鍐呮煡鎵?#8220;鐢辮緭鍏ョ殑鍙﹀涓涓?/span> iterator 瀵規爣蹇楃殑絎簩涓簭鍒?#8221;涓殑浠繪剰涓涓厓绱犵殑絎竴嬈″嚭鐜般傞噸杞界増鏈腑浣跨敤浜嗙敤鎴瘋嚜瀹氫箟鐨勬搷浣滅銆?/span>
for_each 錛氫緷嬈″鑼冨洿鍐呯殑鎵鏈夊厓绱犳墽琛岃緭鍏ョ殑鍑芥暟銆?/font>
generate 錛氶氳繃瀵硅緭鍏ョ殑鍑芥暟 gen 鐨勮繛緇皟鐢ㄦ潵濉厖鎸囧畾鐨勮寖鍥淬?/span>
generate_n 錛氬~鍏?/span> n 涓厓绱犮?/span>
includes 錛氬垽鏂?/span> [first1, last1) 鐨勪竴涓厓绱犳槸鍚﹁鍖呭惈鍦ㄥ彟澶栦竴涓簭鍒椾腑銆備嬌鐢ㄥ簳灞傚厓绱犵殑 <= 鎿嶄綔絎︼紝閲嶈澆鐗堟湰浣跨敤鐢ㄦ埛杈撳叆鐨勫嚱鏁般?/span>
inner_product 錛氬涓や釜搴忓垪鍋氬唴縐?/span> ( 瀵瑰簲鐨勫厓绱犵浉涔橈紝鍐嶆眰鍜?/span> ) 錛屽茍灝嗗唴縐姞鍒頒竴涓緭鍏ョ殑鐨勫垵濮嬪間笂銆傞噸杞界増鏈嬌鐢ㄤ簡鐢ㄦ埛瀹氫箟鐨勬搷浣溿?/span>
inner_merge 錛氬悎騫朵袱涓帓榪囧簭鐨勮繛緇簭鍒楋紝緇撴灉搴忓垪瑕嗙洊浜嗕袱绔寖鍥達紝閲嶈澆鐗堟湰浣跨敤杈撳叆鐨勬搷浣滆繘琛屾帓搴忋?/font>
iter_swap 錛氫氦鎹袱涓?/span> ForwardIterator 鐨勫箋?/span>
lexicographical_compare 錛氭瘮杈冧袱涓簭鍒椼傞噸杞界増鏈嬌鐢ㄤ簡鐢ㄦ埛鑷畾涔夌殑姣旇緝鎿嶄綔銆?/font>
lower_bound 錛氳繑鍥炰竴涓?/span> iterator 錛屽畠鎸囧悜鍦ㄨ寖鍥村唴鐨勬湁搴忓簭鍒椾腑鍙互鎻掑叆鎸囧畾鍊艱屼笉鐮村潖瀹瑰櫒欏哄簭鐨勭涓涓綅緗傞噸杞藉嚱鏁頒嬌鐢ㄤ簡鑷畾涔夌殑姣旇緝鎿嶄綔銆?/span>
max 錛氳繑鍥炰袱涓厓绱犱腑鐨勮緝澶х殑涓涓紝閲嶈澆鐗堟湰浣跨敤浜嗚嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
max_element 錛氳繑鍥炰竴涓?/span> iterator 錛屾寚鍑哄簭鍒椾腑鏈澶х殑鍏冪礌銆傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/span>
min 錛氫袱涓厓绱犱腑鐨勮緝灝忚呫傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
min_element 錛氱被浼間笌 max_element 錛屼笉榪囪繑鍥炴渶灝忕殑鍏冪礌銆?/span>
merge 錛氬悎騫朵袱涓湁搴忓簭鍒楋紝騫跺瓨鏀懼埌鍙﹀涓涓簭鍒椾腑銆傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冦?/font>
mismatch 錛氬茍琛岀殑姣旇緝涓や釜搴忓垪錛屾寚鍑虹涓涓笉鍖歸厤鐨勪綅緗紝瀹冭繑鍥炰竴瀵?/span> iterator 錛屾爣蹇楃涓涓笉鍖歸厤鐨勫厓绱犱綅緗傚鏋滈兘鍖歸厤錛岃繑鍥炴瘡涓鍣ㄧ殑 last 銆傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/span>
next_permutation 錛氬彇鍑哄綋鍓嶈寖鍥村唴鐨勬帓鍒楋紝騫跺皢鍏墮噸鏂版帓搴忎負涓嬩竴涓帓鍒椼傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
nth_element 錛氬皢鑼冨洿鍐呯殑搴忓垪閲嶆柊鎺掑簭錛屼嬌鎵鏈夊皬浜庣 n 涓厓绱犵殑鍏冪礌閮藉嚭鐜板湪瀹冨墠闈紝鑰屽ぇ浜庡畠鐨勯兘鍑虹幇鍦ㄥ悗闈紝閲嶈澆鐗堟湰浣跨敤浜嗚嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/span>
partial_sort 錛氬鏁翠釜搴忓垪鍋氶儴鍒嗘帓搴忥紝琚帓搴忓厓绱犵殑涓暟姝eソ鍙互琚斁鍒拌寖鍥村唴銆傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
partial_sort_copy 錛氫笌 partial_sort 鐩稿悓錛岄櫎浜嗗皢緇忚繃鎺掑簭鐨勫簭鍒楀鍒跺埌鍙﹀涓涓鍣ㄣ?/span>
partial_sum 錛氬垱寤轟竴涓柊鐨勫厓绱犲簭鍒楋紝鍏朵腑姣忎釜鍏冪礌鐨勫間唬琛ㄤ簡鑼冨洿鍐呰浣嶇疆涔嬪墠鎵鏈夊厓绱犱箣鍜屻傞噸杞界増鏈嬌鐢ㄤ簡鑷畾涔夋搷浣滄浛浠e姞娉曘?/font>
partition 錛氬鑼冨洿鍐呭厓绱犻噸鏂版帓搴忥紝浣跨敤杈撳叆鐨勫嚱鏁幫紝鎶婅綆楃粨鏋滀負 true 鐨勫厓绱犻兘鏀懼湪緇撴灉涓?/span> false 鐨勫厓绱犱箣鍓嶃?/span>
prev_permutation 錛氬彇鍑鴻寖鍥村唴鐨勫簭鍒楀茍灝嗗畠閲嶆柊鎺掑簭涓轟笂涓涓簭鍒椼傚鏋滀笉瀛樺湪涓婁竴涓簭鍒楀垯榪斿洖 false 銆傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/span>
random_shuffle 錛氬鑼冨洿鍐呯殑鍏冪礌闅忔満璋冩暣嬈″簭銆傞噸杞界増鏈緭鍏ヤ竴涓殢鏈烘暟浜х敓鎿嶄綔銆?/font>
remove 錛氬垹闄ゅ湪鑼冨洿鍐呯殑鎵鏈夌瓑浜庢寚瀹氱殑鍏冪礌錛屾敞鎰忥紝璇ュ嚱鏁板茍涓嶇湡姝e垹闄ゅ厓绱犮傚唴緗暟緇勪笉閫傚悎浣跨敤 remove 鍜?/span> remove_if 鍑芥暟銆?/span>
remove_copy 錛氬皢鎵鏈変笉鍖歸厤鐨勫厓绱犻兘澶嶅埗鍒頒竴涓寚瀹氬鍣紝榪斿洖鐨?/span> OutputIterator 鎸囧悜琚嫹璐濈殑鏈厓绱犵殑涓嬩竴涓綅緗?/span>
remove_if 錛氬垹闄ゆ墍鏈夎寖鍥村唴杈撳叆鎿嶄綔緇撴灉涓?/span> true 鐨勫厓绱犮?/span>
remove_copy_if 錛氬皢鎵鏈変笉鍖歸厤鐨勫厓绱犳嫹璐濆埌涓涓寚瀹氬鍣ㄣ?/font>
replace 錛氬皢鑼冨洿鍐呯殑鎵鏈夌瓑浜?/span> old_value 鐨勫厓绱犻兘鐢?/span> new_value 鏇夸唬銆?/span>
replace_copy 錛氫笌 replace 綾諱技錛屼笉榪囧皢緇撴灉鍐欏叆鍙﹀涓涓鍣ㄣ?/span>
replace_if 錛氬皢鑼冨洿鍐呯殑鎵鏈夋搷浣滅粨鏋滀負 true 鐨勫厓绱犵敤鏂板兼浛浠c?/span>
replace_copy_if 錛氱被浼間笌 replace_if 錛屼笉榪囧皢緇撴灉鍐欏叆鍙﹀涓涓鍣ㄣ?/span>
reverse 錛氬皢鑼冨洿鍐呭厓绱犻噸鏂版寜鍙嶅簭鎺掑垪銆?/font>
reverse_copy 錛氱被浼間笌 reverse 錛屼笉榪囧皢緇撴灉鍐欏叆鍙﹀涓涓鍣ㄣ?/span>
rotate 錛氬皢鑼冨洿鍐呯殑鍏冪礌縐誨埌瀹瑰櫒鏈熬錛岀敱 middle 鎸囧悜鐨勫厓绱犳垚涓哄鍣ㄧ涓涓厓绱犮?/span>
rotate_copy 錛氱被浼間笌 rotate 錛屼笉榪囧皢緇撴灉鍐欏叆鍙﹀涓涓鍣ㄣ?/span>
search 錛氱粰鍑轟簡涓や釜鑼冨洿錛岃繑鍥炰竴涓?/span> iterator 錛屾寚鍚戝湪鑼冨洿鍐呯涓嬈″嚭鐜板瓙搴忓垪鐨勪綅緗傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/span>
search_n 錛氬湪鑼冨洿鍐呮煡鎵?/span> value 鍑虹幇 n 嬈$殑瀛愬簭鍒椼傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/span>
set_difference 錛氭瀯閫犱竴涓帓榪囧簭鐨勫簭鍒楋紝鍏朵腑鐨勫厓绱犲嚭鐜板湪絎竴涓簭鍒椾腑錛屼絾鏄笉鍖呭惈鍦ㄧ浜屼釜搴忓垪涓傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
set_intersection 錛氭瀯閫犱竴涓帓榪囧簭鐨勫簭鍒楋紝鍏朵腑鐨勫厓绱犲湪涓や釜搴忓垪涓兘瀛樺湪銆傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
set_symmetric_difference 錛氭瀯閫犱竴涓帓榪囧簭鐨勫簭鍒楋紝鍏朵腑鐨勫厓绱犲湪絎竴涓簭鍒椾腑鍑虹幇錛屼絾鏄笉鍑虹幇鍦ㄧ浜屼釜搴忓垪涓傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
set_union 錛氭瀯閫犱竴涓帓榪囧簭鐨勫簭鍒楋紝瀹冨寘鍚袱涓簭鍒椾腑鐨勬墍鏈夌殑涓嶉噸澶嶅厓绱犮傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
sort 錛氫互鍗囧簭閲嶆柊鎺掑垪鑼冨洿鍐呯殑鍏冪礌錛岄噸杞界増鏈嬌鐢ㄤ簡鑷畾涔夌殑姣旇緝鎿嶄綔銆?/font>
stable_partition 錛氫笌 partition 綾諱技錛屼笉榪囧畠涓嶄繚璇佷繚鐣欏鍣ㄤ腑鐨勭浉瀵歸『搴忋?/span>
stable_sort 錛氱被浼間笌 sort 錛屼笉榪囦繚鐣欑浉絳夊厓绱犱箣闂寸殑欏哄簭鍏崇郴銆?/span>
swap 錛氫氦鎹㈠瓨鍌ㄥ湪涓や釜瀵硅薄涓殑鍊箋?/font>
swap_range 錛氬皢鍦ㄨ寖鍥村唴鐨勫厓绱犱笌鍙﹀涓涓簭鍒楃殑鍏冪礌鍊艱繘琛屼氦鎹€?/font>
transform 錛氬皢杈撳叆鐨勬搷浣滀綔鐢ㄥ湪鑼冨洿鍐呯殑姣忎釜鍏冪礌涓婏紝騫朵駭鐢熶竴涓柊鐨勫簭鍒椼傞噸杞界増鏈皢鎿嶄綔浣滅敤鍦ㄤ竴瀵瑰厓绱犱笂錛屽彟澶栦竴涓厓绱犳潵鑷緭鍏ョ殑鍙﹀涓涓簭鍒椼傜粨鏋滆緭鍑哄埌鎸囧畾鐨勫鍣ㄣ?/font>
unique 錛氭竻闄ゅ簭鍒椾腑閲嶅鐨勫厓绱狅紝鍜?/span> remove 綾諱技錛屽畠涔熶笉鑳界湡姝g殑鍒犻櫎鍏冪礌銆傞噸杞界増鏈嬌鐢ㄤ簡鑷畾涔夌殑鎿嶄綔銆?/span>
unique_copy 錛氱被浼間笌 unique 錛屼笉榪囧畠鎶婄粨鏋滆緭鍑哄埌鍙﹀涓涓鍣ㄣ?/span>
upper_bound 錛氳繑鍥炰竴涓?/span> iterator 錛屽畠鎸囧悜鍦ㄨ寖鍥村唴鐨勬湁搴忓簭鍒椾腑鎻掑叆 value 鑰屼笉鐮村潖瀹瑰櫒欏哄簭鐨勬渶鍚庝竴涓綅緗紝璇ヤ綅緗爣蹇椾簡涓涓ぇ浜?/span> value 鐨勫箋傞噸杞界増鏈嬌鐢ㄤ簡杈撳叆鐨勬瘮杈冩搷浣溿?/span>
鍫嗙畻娉曪細 C++ 鏍囧噯搴撴彁渚涚殑鏄?/span> max-heap 銆備竴鍏辯敱浠ヤ笅 4 涓硾鍨嬪爢綆楁硶銆?/span>
make_heap 錛氭妸鑼冨洿鍐呯殑鍏冪礌鐢熸垚涓涓爢銆傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
pop_heap 錛氬茍涓嶆槸鐪熸鐨勬妸鏈澶у厓绱犱粠鍫嗕腑寮瑰嚭錛岃屾槸閲嶆柊鎺掑簭鍫嗐傚畠鎶?/span> first 鍜?/span> last-1 浜ゆ崲錛岀劧鍚庨噸鏂板仛鎴愪竴涓爢銆傚彲浠ヤ嬌鐢ㄥ鍣ㄧ殑 back 鏉ヨ闂“寮瑰嚭“鐨勫厓绱犳垨鑰呬嬌鐢?/span> pop_back 鏉ョ湡姝g殑鍒犻櫎銆傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/span>
push_heap 錛氬亣璁?/span> first 鍒?/span> last-1 鏄竴涓湁鏁堢殑鍫嗭紝瑕佽鍔犲叆鍫嗙殑鍏冪礌鍦ㄤ綅緗?/span> last-1 錛岄噸鏂扮敓鎴愬爢銆傚湪鎸囧悜璇ュ嚱鏁板墠錛屽繀欏誨厛鎶婂厓绱犳彃鍏ュ鍣ㄥ悗銆傞噸杞界増鏈嬌鐢ㄦ寚瀹氱殑姣旇緝銆?/span>
sort_heap 錛氬鑼冨洿鍐呯殑搴忓垪閲嶆柊鎺掑簭錛屽畠鍋囪璇ュ簭鍒楁槸涓湁搴忕殑鍫嗐傞噸杞界増鏈嬌鐢ㄨ嚜瀹氫箟鐨勬瘮杈冩搷浣溿?/font>
class String 

{
public:
String(const char *str = NULL); // 鏅氭瀯閫犲嚱鏁?#160;
String(const String &other); // 鎷瘋礉鏋勯犲嚱鏁?#160;
~ String(void); // 鏋愭瀯鍑芥暟
String & operate =(const String &other); // 璧嬪煎嚱鏁?#160;
private:
char *m_data; // 鐢ㄤ簬淇濆瓨瀛楃涓?#160;
}; 
// String 鐨勬瀽鏋勫嚱鏁?#160;
String::~String(void) 

{
delete [] m_data;// 鐢變簬m_data 鏄唴閮ㄦ暟鎹被鍨?涔熷彲浠ュ啓鎴恉elete m_data;
} 
// String 鐨勬櫘閫氭瀯閫犲嚱鏁?#160;
String::String(const char *str) 

{
if(str==NULL) 
{
m_data = new char[1]; // 鑻ヨ兘鍔燦ULL 鍒ゆ柇鍒欐洿濂?#160;
*m_data = '\0';
}
else 
{
int length = strlen(str);
m_data = new char[length+1]; // 鑻ヨ兘鍔燦ULL 鍒ゆ柇鍒欐洿濂?#160;
strcpy(m_data, str);
}
} 
// 鎷瘋礉鏋勯犲嚱鏁?#160;
String::String(const String &other) 

{
int length = strlen(other.m_data);
m_data = new char[length+1]; // 鑻ヨ兘鍔燦ULL 鍒ゆ柇鍒欐洿濂?#160;
strcpy(m_data, other.m_data);
} 

// 璧嬪煎嚱鏁?#160;
String & String::operate =(const String &other) 

{
// (1) 媯鏌ヨ嚜璧嬪?#160;
if(this == &other)
return *this;
// (2) 閲婃斁鍘熸湁鐨勫唴瀛樿祫婧?#160;
delete [] m_data;
// (3)鍒嗛厤鏂扮殑鍐呭瓨璧勬簮,騫跺鍒跺唴瀹?#160;
int length = strlen(other.m_data);
m_data = new char[length+1]; // 鑻ヨ兘鍔燦ULL 鍒ゆ柇鍒欐洿濂?#160;
strcpy(m_data, other.m_data);
// (4)榪斿洖鏈璞$殑寮曠敤
return *this;
}