[{"data":1,"prerenderedAt":6342},["ShallowReactive",2],{"wiki-page-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":3,"wiki-doc-items-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":5913,"language-switcher-data-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":6326,"wiki-i18n-paths-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":6341},{"id":4,"title":5,"body":6,"canonicalPath":5895,"chapterDepth":318,"chapterOrder":5896,"date":5897,"description":311,"docI18nKey":5898,"docKey":5899,"docRoot":5900,"docTitle":5901,"extension":5902,"i18nKey":5903,"isBlogPost":5904,"isWikiDoc":348,"isWikiIndex":5904,"layout":5905,"legacyPath":5905,"locale":5906,"localeSlug":5907,"meta":5908,"navigation":348,"path":5895,"seo":5909,"sourcePath":5910,"sourceStem":5903,"stem":5911,"wikiDepth":318,"__hash__":5912},"content\u002F_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式.md","Lambda 表達式",{"type":7,"value":8,"toc":5873},"minimark",[9,13,17,35,38,41,44,47,123,130,134,158,165,168,294,297,302,305,848,855,863,870,873,902,908,918,921,938,944,947,956,963,1006,1015,1095,1100,1106,1168,1174,1182,1185,1192,1195,1222,1228,1269,1272,1284,1287,1341,1346,1426,1432,1476,1479,1483,1770,1774,1780,1784,1787,2053,2057,2063,2067,2074,2265,2269,2275,2283,2295,2351,2357,2426,2431,2455,2479,2482,2506,2518,2526,2530,2533,3009,3013,3019,3023,3026,3176,3187,3205,3215,3221,3225,3237,3244,3250,3256,3259,3262,3278,3281,3294,3297,3304,3311,3317,3320,3335,3338,3418,3429,3434,3489,3498,3504,3511,3517,3532,3538,3573,3586,3591,3607,3613,3709,3714,3726,3729,3741,3744,3764,3767,3773,3776,3791,3805,3808,3850,3863,3877,3887,3890,3939,3942,3950,3953,3971,3974,3991,4002,4005,4019,4022,4028,4031,4037,4042,4083,4086,4097,4100,4114,4120,4137,4143,4146,4165,4168,4179,4189,4206,4215,4220,4226,4248,4256,4259,4262,4268,4271,4284,4287,4293,4299,4312,4315,4364,4367,4372,4375,4378,4434,4440,4448,4451,4456,4459,4475,4481,4486,4492,4503,4513,4516,4521,4524,4529,4532,4539,4543,4546,4853,4857,4863,4879,4886,4892,5119,5123,5129,5131,5158,5164,5173,5176,5188,5208,5221,5228,5234,5471,5475,5481,5484,5500,5507,5513,5516,5532,5537,5540,5580,5588,5593,5630,5633,5636,5754,5757,5791,5794,5828,5831,5869],[10,11,12],"h2",{"id":12},"本節解決什麼問題",[14,15,16],"p",{},"很多地方需要傳入一小段邏輯：排序規則、過濾條件、按鈕回調、定時器回調。舊寫法通常有三種：",[18,19,20,24,27],"ol",{},[21,22,23],"li",{},"寫一個普通函數。",[21,25,26],{},"寫一個函數指針。",[21,28,29,30,34],{},"寫一個函數對象，也就是帶 ",[31,32,33],"code",{},"operator()"," 的類或結構體。",[14,36,37],{},"這些寫法都能工作，但小邏輯會被迫挪到遠處，或者要額外寫一個類型。Lambda 表達式讓你可以在使用現場直接寫一個小函數，而且可以捕獲外部變量。",[10,39,40],{"id":40},"這個特性是什麼",[14,42,43],{},"Lambda 是匿名可調用對象。它看起來像一個函數，但本質上是編譯器生成的一個類對象。",[14,45,46],{},"基本結構是：",[48,49,50,67],"table",{},[51,52,53],"thead",{},[54,55,56,61,64],"tr",{},[57,58,60],"th",{"align":59},"left","部分",[57,62,63],{"align":59},"例子",[57,65,66],{"align":59},"含義",[68,69,70,84,97,110],"tbody",{},[54,71,72,76,81],{},[73,74,75],"td",{"align":59},"捕獲列表",[73,77,78],{"align":59},[31,79,80],{},"[x, &y]",[73,82,83],{"align":59},"從外部作用域拿哪些變量",[54,85,86,89,94],{},[73,87,88],{"align":59},"參數列表",[73,90,91],{"align":59},[31,92,93],{},"(int a, int b)",[73,95,96],{"align":59},"調用 lambda 時傳入什麼",[54,98,99,102,107],{},[73,100,101],{"align":59},"返回值",[73,103,104],{"align":59},[31,105,106],{},"-> int",[73,108,109],{"align":59},"返回類型，通常可以省略",[54,111,112,115,120],{},[73,113,114],{"align":59},"函數體",[73,116,117],{"align":59},[31,118,119],{},"{ return a + b; }",[73,121,122],{"align":59},"真正執行的代碼",[14,124,125,126,129],{},"完整形式可以寫成 ",[31,127,128],{},"[x](int n) -> int { return x + n; }","，常見情況下返回值類型可以省略。",[10,131,133],{"id":132},"c-標準版本","C++ 標準版本",[135,136,137,140,147],"ul",{},[21,138,139],{},"C++11：基礎 Lambda。",[21,141,142,143,146],{},"C++14：泛型 Lambda，也就是參數可以寫 ",[31,144,145],{},"auto","。",[21,148,149,150,153,154,157],{},"C++17：",[31,151,152],{},"constexpr"," Lambda、",[31,155,156],{},"[*this]"," 捕獲。",[14,159,160,161,164],{},"Lambda 是語言特性，不需要額外頭文件。只有配合 STL 算法、",[31,162,163],{},"std::function"," 等庫工具時，才需要包含對應頭文件。",[10,166,167],{"id":167},"捕獲列表速查",[48,169,170,182],{},[51,171,172],{},[54,173,174,177,179],{},[57,175,176],{"align":59},"寫法",[57,178,66],{"align":59},[57,180,181],{"align":59},"適用場景",[68,183,184,197,213,228,240,253,266,279],{},[54,185,186,191,194],{},[73,187,188],{"align":59},[31,189,190],{},"[]",[73,192,193],{"align":59},"不捕獲外部變量",[73,195,196],{"align":59},"只用參數或局部臨時變量",[54,198,199,204,210],{},[73,200,201],{"align":59},[31,202,203],{},"[x]",[73,205,206,207],{"align":59},"按值捕獲 ",[31,208,209],{},"x",[73,211,212],{"align":59},"保存一份副本，適合保存回調",[54,214,215,220,225],{},[73,216,217],{"align":59},[31,218,219],{},"[&x]",[73,221,222,223],{"align":59},"按引用捕獲 ",[31,224,209],{},[73,226,227],{"align":59},"需要修改外部變量，且能保證生命週期",[54,229,230,234,237],{},[73,231,232],{"align":59},[31,233,80],{},[73,235,236],{"align":59},"混合捕獲",[73,238,239],{"align":59},"明確表達哪些拷貝、哪些引用",[54,241,242,247,250],{},[73,243,244],{"align":59},[31,245,246],{},"[=]",[73,248,249],{"align":59},"默認按值捕獲用到的變量",[73,251,252],{"align":59},"小例子方便，工程中不建議濫用",[54,254,255,260,263],{},[73,256,257],{"align":59},[31,258,259],{},"[&]",[73,261,262],{"align":59},"默認按引用捕獲用到的變量",[73,264,265],{"align":59},"異步或保存回調中尤其危險",[54,267,268,273,276],{},[73,269,270],{"align":59},[31,271,272],{},"[this]",[73,274,275],{"align":59},"捕獲當前對象指針",[73,277,278],{"align":59},"對象必須比 lambda 活得久",[54,280,281,285,288],{},[73,282,283],{"align":59},[31,284,156],{},[73,286,287],{"align":59},"捕獲當前對象副本",[73,289,290,291],{"align":59},"C++17 起可用，適合避免懸空 ",[31,292,293],{},"this",[10,295,296],{"id":296},"示例代碼",[298,299,301],"h3",{"id":300},"示例-1舊回調寫法和-lambda-的區別","示例 1：舊回調寫法和 lambda 的區別",[14,303,304],{},"普通函數和函數對象都可以作爲算法條件，但 Lambda 更適合寫簡短的局部邏輯。",[306,307,312],"pre",{"className":308,"code":309,"language":310,"meta":311,"style":311},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Calgorithm>\n#include \u003Ciostream>\n#include \u003Cvector>\n\nbool is_even(int n)\n{\n    return n % 2 == 0;\n}\n\nstruct GreaterThan\n{\n    int limit;\n\n    bool operator()(int n) const\n    {\n        return n > limit;\n    }\n};\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    \u002F\u002F vector 是动态数组，元素数量可以在运行时变化。\n    std::vector\u003Cint> numbers = {1, 2, 3, 4, 5, 6};\n\n    int even_count = std::count_if(numbers.begin(), numbers.end(), is_even);\n    std::cout \u003C\u003C \"even count = \" \u003C\u003C even_count \u003C\u003C \"\\n\";\n\n    int greater_count1 = std::count_if(numbers.begin(), numbers.end(), GreaterThan{3});\n    std::cout \u003C\u003C \"> 3 count (functor) = \" \u003C\u003C greater_count1 \u003C\u003C \"\\n\";\n\n    int limit = 3;\n    int greater_count2 = std::count_if(numbers.begin(), numbers.end(),\n                                       [limit](int n) {\n                                           return n > limit;\n                                       });\n    std::cout \u003C\u003C \"> 3 count (lambda) = \" \u003C\u003C greater_count2 \u003C\u003C \"\\n\";\n\n    return 0;\n}\n","cpp","",[31,313,314,327,335,343,350,374,380,405,411,416,425,430,439,444,468,474,487,493,499,504,515,520,527,533,585,590,624,656,661,693,719,724,739,766,785,797,803,829,834,843],{"__ignoreMap":311},[315,316,319,323],"span",{"class":317,"line":318},"line",1,[315,320,322],{"class":321},"szBVR","#include",[315,324,326],{"class":325},"sZZnC"," \u003Calgorithm>\n",[315,328,330,332],{"class":317,"line":329},2,[315,331,322],{"class":321},[315,333,334],{"class":325}," \u003Ciostream>\n",[315,336,338,340],{"class":317,"line":337},3,[315,339,322],{"class":321},[315,341,342],{"class":325}," \u003Cvector>\n",[315,344,346],{"class":317,"line":345},4,[315,347,349],{"emptyLinePlaceholder":348},true,"\n",[315,351,353,356,360,364,367,371],{"class":317,"line":352},5,[315,354,355],{"class":321},"bool",[315,357,359],{"class":358},"sScJk"," is_even",[315,361,363],{"class":362},"sVt8B","(",[315,365,366],{"class":321},"int",[315,368,370],{"class":369},"s4XuR"," n",[315,372,373],{"class":362},")\n",[315,375,377],{"class":317,"line":376},6,[315,378,379],{"class":362},"{\n",[315,381,383,386,389,392,396,399,402],{"class":317,"line":382},7,[315,384,385],{"class":321},"    return",[315,387,388],{"class":362}," n ",[315,390,391],{"class":321},"%",[315,393,395],{"class":394},"sj4cs"," 2",[315,397,398],{"class":321}," ==",[315,400,401],{"class":394}," 0",[315,403,404],{"class":362},";\n",[315,406,408],{"class":317,"line":407},8,[315,409,410],{"class":362},"}\n",[315,412,414],{"class":317,"line":413},9,[315,415,349],{"emptyLinePlaceholder":348},[315,417,419,422],{"class":317,"line":418},10,[315,420,421],{"class":321},"struct",[315,423,424],{"class":358}," GreaterThan\n",[315,426,428],{"class":317,"line":427},11,[315,429,379],{"class":362},[315,431,433,436],{"class":317,"line":432},12,[315,434,435],{"class":321},"    int",[315,437,438],{"class":362}," limit;\n",[315,440,442],{"class":317,"line":441},13,[315,443,349],{"emptyLinePlaceholder":348},[315,445,447,450,453,456,458,460,462,465],{"class":317,"line":446},14,[315,448,449],{"class":321},"    bool",[315,451,452],{"class":321}," operator",[315,454,455],{"class":358},"()",[315,457,363],{"class":362},[315,459,366],{"class":321},[315,461,370],{"class":369},[315,463,464],{"class":362},") ",[315,466,467],{"class":321},"const\n",[315,469,471],{"class":317,"line":470},15,[315,472,473],{"class":362},"    {\n",[315,475,477,480,482,485],{"class":317,"line":476},16,[315,478,479],{"class":321},"        return",[315,481,388],{"class":362},[315,483,484],{"class":321},">",[315,486,438],{"class":362},[315,488,490],{"class":317,"line":489},17,[315,491,492],{"class":362},"    }\n",[315,494,496],{"class":317,"line":495},18,[315,497,498],{"class":362},"};\n",[315,500,502],{"class":317,"line":501},19,[315,503,349],{"emptyLinePlaceholder":348},[315,505,507,509,512],{"class":317,"line":506},20,[315,508,366],{"class":321},[315,510,511],{"class":358}," main",[315,513,514],{"class":362},"()\n",[315,516,518],{"class":317,"line":517},21,[315,519,379],{"class":362},[315,521,523],{"class":317,"line":522},22,[315,524,526],{"class":525},"sJ8bj","    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[315,528,530],{"class":317,"line":529},23,[315,531,532],{"class":525},"    \u002F\u002F vector 是动态数组，元素数量可以在运行时变化。\n",[315,534,536,539,542,545,548,551,554,557,560,563,565,568,570,573,575,578,580,583],{"class":317,"line":535},24,[315,537,538],{"class":358},"    std",[315,540,541],{"class":362},"::vector",[315,543,544],{"class":321},"\u003Cint>",[315,546,547],{"class":362}," numbers ",[315,549,550],{"class":321},"=",[315,552,553],{"class":362}," {",[315,555,556],{"class":394},"1",[315,558,559],{"class":362},", ",[315,561,562],{"class":394},"2",[315,564,559],{"class":362},[315,566,567],{"class":394},"3",[315,569,559],{"class":362},[315,571,572],{"class":394},"4",[315,574,559],{"class":362},[315,576,577],{"class":394},"5",[315,579,559],{"class":362},[315,581,582],{"class":394},"6",[315,584,498],{"class":362},[315,586,588],{"class":317,"line":587},25,[315,589,349],{"emptyLinePlaceholder":348},[315,591,593,595,598,600,603,606,609,612,615,618,621],{"class":317,"line":592},26,[315,594,435],{"class":321},[315,596,597],{"class":362}," even_count ",[315,599,550],{"class":321},[315,601,602],{"class":358}," std",[315,604,605],{"class":362},"::",[315,607,608],{"class":358},"count_if",[315,610,611],{"class":362},"(numbers.",[315,613,614],{"class":358},"begin",[315,616,617],{"class":362},"(), numbers.",[315,619,620],{"class":358},"end",[315,622,623],{"class":362},"(), is_even);\n",[315,625,627,629,632,635,638,641,643,645,648,651,654],{"class":317,"line":626},27,[315,628,538],{"class":358},[315,630,631],{"class":362},"::cout ",[315,633,634],{"class":321},"\u003C\u003C",[315,636,637],{"class":325}," \"even count = \"",[315,639,640],{"class":321}," \u003C\u003C",[315,642,597],{"class":362},[315,644,634],{"class":321},[315,646,647],{"class":325}," \"",[315,649,650],{"class":394},"\\n",[315,652,653],{"class":325},"\"",[315,655,404],{"class":362},[315,657,659],{"class":317,"line":658},28,[315,660,349],{"emptyLinePlaceholder":348},[315,662,664,666,669,671,673,675,677,679,681,683,685,688,690],{"class":317,"line":663},29,[315,665,435],{"class":321},[315,667,668],{"class":362}," greater_count1 ",[315,670,550],{"class":321},[315,672,602],{"class":358},[315,674,605],{"class":362},[315,676,608],{"class":358},[315,678,611],{"class":362},[315,680,614],{"class":358},[315,682,617],{"class":362},[315,684,620],{"class":358},[315,686,687],{"class":362},"(), GreaterThan{",[315,689,567],{"class":394},[315,691,692],{"class":362},"});\n",[315,694,696,698,700,702,705,707,709,711,713,715,717],{"class":317,"line":695},30,[315,697,538],{"class":358},[315,699,631],{"class":362},[315,701,634],{"class":321},[315,703,704],{"class":325}," \"> 3 count (functor) = \"",[315,706,640],{"class":321},[315,708,668],{"class":362},[315,710,634],{"class":321},[315,712,647],{"class":325},[315,714,650],{"class":394},[315,716,653],{"class":325},[315,718,404],{"class":362},[315,720,722],{"class":317,"line":721},31,[315,723,349],{"emptyLinePlaceholder":348},[315,725,727,729,732,734,737],{"class":317,"line":726},32,[315,728,435],{"class":321},[315,730,731],{"class":362}," limit ",[315,733,550],{"class":321},[315,735,736],{"class":394}," 3",[315,738,404],{"class":362},[315,740,742,744,747,749,751,753,755,757,759,761,763],{"class":317,"line":741},33,[315,743,435],{"class":321},[315,745,746],{"class":362}," greater_count2 ",[315,748,550],{"class":321},[315,750,602],{"class":358},[315,752,605],{"class":362},[315,754,608],{"class":358},[315,756,611],{"class":362},[315,758,614],{"class":358},[315,760,617],{"class":362},[315,762,620],{"class":358},[315,764,765],{"class":362},"(),\n",[315,767,769,772,775,778,780,782],{"class":317,"line":768},34,[315,770,771],{"class":362},"                                       [",[315,773,774],{"class":369},"limit",[315,776,777],{"class":362},"](",[315,779,366],{"class":321},[315,781,370],{"class":369},[315,783,784],{"class":362},") {\n",[315,786,788,791,793,795],{"class":317,"line":787},35,[315,789,790],{"class":321},"                                           return",[315,792,388],{"class":362},[315,794,484],{"class":321},[315,796,438],{"class":362},[315,798,800],{"class":317,"line":799},36,[315,801,802],{"class":362},"                                       });\n",[315,804,806,808,810,812,815,817,819,821,823,825,827],{"class":317,"line":805},37,[315,807,538],{"class":358},[315,809,631],{"class":362},[315,811,634],{"class":321},[315,813,814],{"class":325}," \"> 3 count (lambda) = \"",[315,816,640],{"class":321},[315,818,746],{"class":362},[315,820,634],{"class":321},[315,822,647],{"class":325},[315,824,650],{"class":394},[315,826,653],{"class":325},[315,828,404],{"class":362},[315,830,832],{"class":317,"line":831},38,[315,833,349],{"emptyLinePlaceholder":348},[315,835,837,839,841],{"class":317,"line":836},39,[315,838,385],{"class":321},[315,840,401],{"class":394},[315,842,404],{"class":362},[315,844,846],{"class":317,"line":845},40,[315,847,410],{"class":362},[14,849,850,854],{},[851,852,853],"strong",{},"運行結果","：",[306,856,861],{"className":857,"code":859,"language":860,"meta":311},[858],"language-text","even count = 3\n> 3 count (functor) = 3\n> 3 count (lambda) = 3\n","text",[31,862,859],{"__ignoreMap":311},[864,865,867,869],"h4",{"id":866},"count_if-的第三個參數是什麼",[31,868,608],{}," 的第三個參數是什麼？",[14,871,872],{},"先看這一句：",[306,874,876],{"className":308,"code":875,"language":310,"meta":311,"style":311},"int even_count = std::count_if(numbers.begin(), numbers.end(), is_even);\n",[31,877,878],{"__ignoreMap":311},[315,879,880,882,884,886,888,890,892,894,896,898,900],{"class":317,"line":318},[315,881,366],{"class":321},[315,883,597],{"class":362},[315,885,550],{"class":321},[315,887,602],{"class":358},[315,889,605],{"class":362},[315,891,608],{"class":358},[315,893,611],{"class":362},[315,895,614],{"class":358},[315,897,617],{"class":362},[315,899,620],{"class":358},[315,901,623],{"class":362},[14,903,904,907],{},[31,905,906],{},"std::count_if"," 可以簡單理解爲：",[909,910,911],"blockquote",{},[14,912,913,914,917],{},"從指定範圍中逐個取出元素，調用你提供的“判斷規則”，統計其中返回 ",[31,915,916],{},"true"," 的元素有多少個。",[14,919,920],{},"它的基本形式是：",[306,922,924],{"className":308,"code":923,"language":310,"meta":311,"style":311},"std::count_if(起点, 终点, 判断规则);\n",[31,925,926],{"__ignoreMap":311},[315,927,928,931,933,935],{"class":317,"line":318},[315,929,930],{"class":358},"std",[315,932,605],{"class":362},[315,934,608],{"class":358},[315,936,937],{"class":362},"(起点, 终点, 判断规则);\n",[14,939,940,941,146],{},"第三個參數就是這個“判斷規則”。它並不一定非得是普通函數，只要是可以像函數一樣調用的對象就可以，包括普通函數、函數對象和 Lambda。這些東西統稱爲",[851,942,943],{},"可調用對象（Callable）",[14,945,946],{},"這裏第三個參數傳入的是：",[306,948,950],{"className":308,"code":949,"language":310,"meta":311,"style":311},"is_even\n",[31,951,952],{"__ignoreMap":311},[315,953,954],{"class":317,"line":318},[315,955,949],{"class":362},[14,957,958,959,962],{},"而 ",[31,960,961],{},"is_even"," 是：",[306,964,966],{"className":308,"code":965,"language":310,"meta":311,"style":311},"bool is_even(int n)\n{\n    return n % 2 == 0;\n}\n",[31,967,968,982,986,1002],{"__ignoreMap":311},[315,969,970,972,974,976,978,980],{"class":317,"line":318},[315,971,355],{"class":321},[315,973,359],{"class":358},[315,975,363],{"class":362},[315,977,366],{"class":321},[315,979,370],{"class":369},[315,981,373],{"class":362},[315,983,984],{"class":317,"line":329},[315,985,379],{"class":362},[315,987,988,990,992,994,996,998,1000],{"class":317,"line":337},[315,989,385],{"class":321},[315,991,388],{"class":362},[315,993,391],{"class":321},[315,995,395],{"class":394},[315,997,398],{"class":321},[315,999,401],{"class":394},[315,1001,404],{"class":362},[315,1003,1004],{"class":317,"line":345},[315,1005,410],{"class":362},[14,1007,1008,1010,1011,1014],{},[31,1009,608],{}," 會把 ",[31,1012,1013],{},"numbers"," 中的元素一個一個傳給它，過程可以近似理解成：",[306,1016,1018],{"className":308,"code":1017,"language":310,"meta":311,"style":311},"is_even(1);  \u002F\u002F false，不计数\nis_even(2);  \u002F\u002F true，计数 +1\nis_even(3);  \u002F\u002F false，不计数\nis_even(4);  \u002F\u002F true，计数 +1\nis_even(5);  \u002F\u002F false，不计数\nis_even(6);  \u002F\u002F true，计数 +1\n",[31,1019,1020,1034,1047,1059,1071,1083],{"__ignoreMap":311},[315,1021,1022,1024,1026,1028,1031],{"class":317,"line":318},[315,1023,961],{"class":358},[315,1025,363],{"class":362},[315,1027,556],{"class":394},[315,1029,1030],{"class":362},");",[315,1032,1033],{"class":525},"  \u002F\u002F false，不计数\n",[315,1035,1036,1038,1040,1042,1044],{"class":317,"line":329},[315,1037,961],{"class":358},[315,1039,363],{"class":362},[315,1041,562],{"class":394},[315,1043,1030],{"class":362},[315,1045,1046],{"class":525},"  \u002F\u002F true，计数 +1\n",[315,1048,1049,1051,1053,1055,1057],{"class":317,"line":337},[315,1050,961],{"class":358},[315,1052,363],{"class":362},[315,1054,567],{"class":394},[315,1056,1030],{"class":362},[315,1058,1033],{"class":525},[315,1060,1061,1063,1065,1067,1069],{"class":317,"line":345},[315,1062,961],{"class":358},[315,1064,363],{"class":362},[315,1066,572],{"class":394},[315,1068,1030],{"class":362},[315,1070,1046],{"class":525},[315,1072,1073,1075,1077,1079,1081],{"class":317,"line":352},[315,1074,961],{"class":358},[315,1076,363],{"class":362},[315,1078,577],{"class":394},[315,1080,1030],{"class":362},[315,1082,1033],{"class":525},[315,1084,1085,1087,1089,1091,1093],{"class":317,"line":376},[315,1086,961],{"class":358},[315,1088,363],{"class":362},[315,1090,582],{"class":394},[315,1092,1030],{"class":362},[315,1094,1046],{"class":525},[14,1096,1097,1098,146],{},"因此最後得到 ",[31,1099,567],{},[14,1101,1102,1103,1105],{},"可以把 ",[31,1104,608],{}," 的內部工作近似理解成：",[306,1107,1109],{"className":308,"code":1108,"language":310,"meta":311,"style":311},"int count = 0;\n\nfor (每一个元素)\n{\n    if (判断规则(当前元素))\n    {\n        ++count;\n    }\n}\n",[31,1110,1111,1124,1128,1136,1140,1148,1152,1160,1164],{"__ignoreMap":311},[315,1112,1113,1115,1118,1120,1122],{"class":317,"line":318},[315,1114,366],{"class":321},[315,1116,1117],{"class":362}," count ",[315,1119,550],{"class":321},[315,1121,401],{"class":394},[315,1123,404],{"class":362},[315,1125,1126],{"class":317,"line":329},[315,1127,349],{"emptyLinePlaceholder":348},[315,1129,1130,1133],{"class":317,"line":337},[315,1131,1132],{"class":321},"for",[315,1134,1135],{"class":362}," (每一个元素)\n",[315,1137,1138],{"class":317,"line":345},[315,1139,379],{"class":362},[315,1141,1142,1145],{"class":317,"line":352},[315,1143,1144],{"class":321},"    if",[315,1146,1147],{"class":362}," (判断规则(当前元素))\n",[315,1149,1150],{"class":317,"line":376},[315,1151,473],{"class":362},[315,1153,1154,1157],{"class":317,"line":382},[315,1155,1156],{"class":321},"        ++",[315,1158,1159],{"class":362},"count;\n",[315,1161,1162],{"class":317,"line":407},[315,1163,492],{"class":362},[315,1165,1166],{"class":317,"line":413},[315,1167,410],{"class":362},[14,1169,1170,1171,1173],{},"也就是說，",[31,1172,608],{}," 自己負責：",[135,1175,1176,1179],{},[21,1177,1178],{},"怎麼遍歷容器；",[21,1180,1181],{},"怎麼統計數量。",[14,1183,1184],{},"第三個參數負責告訴它：",[909,1186,1187],{},[14,1188,1189],{},[851,1190,1191],{},"什麼樣的元素纔算符合條件？",[14,1193,1194],{},"同一個位置也可以傳入函數對象：",[306,1196,1198],{"className":308,"code":1197,"language":310,"meta":311,"style":311},"std::count_if(numbers.begin(), numbers.end(), GreaterThan{3});\n",[31,1199,1200],{"__ignoreMap":311},[315,1201,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220],{"class":317,"line":318},[315,1203,930],{"class":358},[315,1205,605],{"class":362},[315,1207,608],{"class":358},[315,1209,611],{"class":362},[315,1211,614],{"class":358},[315,1213,617],{"class":362},[315,1215,620],{"class":358},[315,1217,687],{"class":362},[315,1219,567],{"class":394},[315,1221,692],{"class":362},[14,1223,1224,1227],{},[31,1225,1226],{},"GreaterThan{3}"," 可以像函數一樣被調用，因爲結構體定義了：",[306,1229,1231],{"className":308,"code":1230,"language":310,"meta":311,"style":311},"bool operator()(int n) const\n{\n    return n > limit;\n}\n",[31,1232,1233,1251,1255,1265],{"__ignoreMap":311},[315,1234,1235,1237,1239,1241,1243,1245,1247,1249],{"class":317,"line":318},[315,1236,355],{"class":321},[315,1238,452],{"class":321},[315,1240,455],{"class":358},[315,1242,363],{"class":362},[315,1244,366],{"class":321},[315,1246,370],{"class":369},[315,1248,464],{"class":362},[315,1250,467],{"class":321},[315,1252,1253],{"class":317,"line":329},[315,1254,379],{"class":362},[315,1256,1257,1259,1261,1263],{"class":317,"line":337},[315,1258,385],{"class":321},[315,1260,388],{"class":362},[315,1262,484],{"class":321},[315,1264,438],{"class":362},[315,1266,1267],{"class":317,"line":345},[315,1268,410],{"class":362},[14,1270,1271],{},"它回答的問題就是：",[909,1273,1274],{},[14,1275,1276,1277,1280,1281,1283],{},"當前這個 ",[31,1278,1279],{},"n"," 是否大於 ",[31,1282,567],{},"？",[14,1285,1286],{},"還可以直接傳 Lambda：",[306,1288,1290],{"className":308,"code":1289,"language":310,"meta":311,"style":311},"std::count_if(numbers.begin(), numbers.end(),\n              [limit](int n) {\n                  return n > limit;\n              });\n",[31,1291,1292,1310,1325,1336],{"__ignoreMap":311},[315,1293,1294,1296,1298,1300,1302,1304,1306,1308],{"class":317,"line":318},[315,1295,930],{"class":358},[315,1297,605],{"class":362},[315,1299,608],{"class":358},[315,1301,611],{"class":362},[315,1303,614],{"class":358},[315,1305,617],{"class":362},[315,1307,620],{"class":358},[315,1309,765],{"class":362},[315,1311,1312,1315,1317,1319,1321,1323],{"class":317,"line":329},[315,1313,1314],{"class":362},"              [",[315,1316,774],{"class":369},[315,1318,777],{"class":362},[315,1320,366],{"class":321},[315,1322,370],{"class":369},[315,1324,784],{"class":362},[315,1326,1327,1330,1332,1334],{"class":317,"line":337},[315,1328,1329],{"class":321},"                  return",[315,1331,388],{"class":362},[315,1333,484],{"class":321},[315,1335,438],{"class":362},[315,1337,1338],{"class":317,"line":345},[315,1339,1340],{"class":362},"              });\n",[14,1342,1343,1345],{},[31,1344,608],{}," 同樣會反覆調用這個 Lambda：",[306,1347,1349],{"className":308,"code":1348,"language":310,"meta":311,"style":311},"lambda(1);  \u002F\u002F false\nlambda(2);  \u002F\u002F false\nlambda(3);  \u002F\u002F false\nlambda(4);  \u002F\u002F true\nlambda(5);  \u002F\u002F true\nlambda(6);  \u002F\u002F true\n",[31,1350,1351,1365,1377,1389,1402,1414],{"__ignoreMap":311},[315,1352,1353,1356,1358,1360,1362],{"class":317,"line":318},[315,1354,1355],{"class":358},"lambda",[315,1357,363],{"class":362},[315,1359,556],{"class":394},[315,1361,1030],{"class":362},[315,1363,1364],{"class":525},"  \u002F\u002F false\n",[315,1366,1367,1369,1371,1373,1375],{"class":317,"line":329},[315,1368,1355],{"class":358},[315,1370,363],{"class":362},[315,1372,562],{"class":394},[315,1374,1030],{"class":362},[315,1376,1364],{"class":525},[315,1378,1379,1381,1383,1385,1387],{"class":317,"line":337},[315,1380,1355],{"class":358},[315,1382,363],{"class":362},[315,1384,567],{"class":394},[315,1386,1030],{"class":362},[315,1388,1364],{"class":525},[315,1390,1391,1393,1395,1397,1399],{"class":317,"line":345},[315,1392,1355],{"class":358},[315,1394,363],{"class":362},[315,1396,572],{"class":394},[315,1398,1030],{"class":362},[315,1400,1401],{"class":525},"  \u002F\u002F true\n",[315,1403,1404,1406,1408,1410,1412],{"class":317,"line":352},[315,1405,1355],{"class":358},[315,1407,363],{"class":362},[315,1409,577],{"class":394},[315,1411,1030],{"class":362},[315,1413,1401],{"class":525},[315,1415,1416,1418,1420,1422,1424],{"class":317,"line":376},[315,1417,1355],{"class":358},[315,1419,363],{"class":362},[315,1421,582],{"class":394},[315,1423,1030],{"class":362},[315,1425,1401],{"class":525},[14,1427,1428,1429,1431],{},"所以這三種寫法雖然形式不同，本質上都是在給 ",[31,1430,608],{}," 提供一個判斷規則：",[306,1433,1435],{"className":308,"code":1434,"language":310,"meta":311,"style":311},"is_even\nGreaterThan{3}\n[limit](int n) { return n > limit; }\n",[31,1436,1437,1441,1450],{"__ignoreMap":311},[315,1438,1439],{"class":317,"line":318},[315,1440,949],{"class":362},[315,1442,1443,1446,1448],{"class":317,"line":329},[315,1444,1445],{"class":362},"GreaterThan{",[315,1447,567],{"class":394},[315,1449,410],{"class":362},[315,1451,1452,1455,1457,1459,1461,1463,1466,1469,1471,1473],{"class":317,"line":337},[315,1453,1454],{"class":362},"[",[315,1456,774],{"class":369},[315,1458,777],{"class":362},[315,1460,366],{"class":321},[315,1462,370],{"class":369},[315,1464,1465],{"class":362},") { ",[315,1467,1468],{"class":321},"return",[315,1470,388],{"class":362},[315,1472,484],{"class":321},[315,1474,1475],{"class":362}," limit; }\n",[14,1477,1478],{},"Lambda 的優勢在於：如果這個判斷規則只在這裏使用一次，就可以直接寫在算法旁邊，不需要額外定義一個函數或結構體。",[298,1480,1482],{"id":1481},"示例-2最基本的-lambda-語法參數和返回值","示例 2：最基本的 lambda 語法、參數和返回值",[306,1484,1486],{"className":308,"code":1485,"language":310,"meta":311,"style":311},"#include \u003Ciostream>\n#include \u003Cstring>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    auto add = [](int a, int b) {\n        return a + b;\n    };\n\n    auto describe_score = [](int score) -> std::string {\n        if (score >= 60)\n        {\n            return \"pass\";\n        }\n        return \"fail\";\n    };\n\n    std::cout \u003C\u003C \"add(3, 5) = \" \u003C\u003C add(3, 5) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"score 80 is \" \u003C\u003C describe_score(80) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"score 40 is \" \u003C\u003C describe_score(40) \u003C\u003C \"\\n\";\n\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[31,1487,1488,1494,1501,1505,1513,1517,1521,1548,1561,1566,1570,1595,1611,1616,1626,1631,1640,1644,1648,1684,1717,1749,1753,1758,1766],{"__ignoreMap":311},[315,1489,1490,1492],{"class":317,"line":318},[315,1491,322],{"class":321},[315,1493,334],{"class":325},[315,1495,1496,1498],{"class":317,"line":329},[315,1497,322],{"class":321},[315,1499,1500],{"class":325}," \u003Cstring>\n",[315,1502,1503],{"class":317,"line":337},[315,1504,349],{"emptyLinePlaceholder":348},[315,1506,1507,1509,1511],{"class":317,"line":345},[315,1508,366],{"class":321},[315,1510,511],{"class":358},[315,1512,514],{"class":362},[315,1514,1515],{"class":317,"line":352},[315,1516,379],{"class":362},[315,1518,1519],{"class":317,"line":376},[315,1520,526],{"class":525},[315,1522,1523,1526,1529,1531,1534,1536,1539,1541,1543,1546],{"class":317,"line":382},[315,1524,1525],{"class":321},"    auto",[315,1527,1528],{"class":362}," add ",[315,1530,550],{"class":321},[315,1532,1533],{"class":362}," [](",[315,1535,366],{"class":321},[315,1537,1538],{"class":369}," a",[315,1540,559],{"class":362},[315,1542,366],{"class":321},[315,1544,1545],{"class":369}," b",[315,1547,784],{"class":362},[315,1549,1550,1552,1555,1558],{"class":317,"line":407},[315,1551,479],{"class":321},[315,1553,1554],{"class":362}," a ",[315,1556,1557],{"class":321},"+",[315,1559,1560],{"class":362}," b;\n",[315,1562,1563],{"class":317,"line":413},[315,1564,1565],{"class":362},"    };\n",[315,1567,1568],{"class":317,"line":418},[315,1569,349],{"emptyLinePlaceholder":348},[315,1571,1572,1574,1577,1579,1581,1583,1586,1589,1592],{"class":317,"line":427},[315,1573,1525],{"class":321},[315,1575,1576],{"class":362}," describe_score ",[315,1578,550],{"class":321},[315,1580,1533],{"class":362},[315,1582,366],{"class":321},[315,1584,1585],{"class":369}," score",[315,1587,1588],{"class":362},") -> ",[315,1590,1591],{"class":321},"std::string",[315,1593,1594],{"class":362}," {\n",[315,1596,1597,1600,1603,1606,1609],{"class":317,"line":432},[315,1598,1599],{"class":321},"        if",[315,1601,1602],{"class":362}," (score ",[315,1604,1605],{"class":321},">=",[315,1607,1608],{"class":394}," 60",[315,1610,373],{"class":362},[315,1612,1613],{"class":317,"line":441},[315,1614,1615],{"class":362},"        {\n",[315,1617,1618,1621,1624],{"class":317,"line":446},[315,1619,1620],{"class":321},"            return",[315,1622,1623],{"class":325}," \"pass\"",[315,1625,404],{"class":362},[315,1627,1628],{"class":317,"line":470},[315,1629,1630],{"class":362},"        }\n",[315,1632,1633,1635,1638],{"class":317,"line":476},[315,1634,479],{"class":321},[315,1636,1637],{"class":325}," \"fail\"",[315,1639,404],{"class":362},[315,1641,1642],{"class":317,"line":489},[315,1643,1565],{"class":362},[315,1645,1646],{"class":317,"line":495},[315,1647,349],{"emptyLinePlaceholder":348},[315,1649,1650,1652,1654,1656,1659,1661,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682],{"class":317,"line":501},[315,1651,538],{"class":358},[315,1653,631],{"class":362},[315,1655,634],{"class":321},[315,1657,1658],{"class":325}," \"add(3, 5) = \"",[315,1660,640],{"class":321},[315,1662,1663],{"class":358}," add",[315,1665,363],{"class":362},[315,1667,567],{"class":394},[315,1669,559],{"class":362},[315,1671,577],{"class":394},[315,1673,464],{"class":362},[315,1675,634],{"class":321},[315,1677,647],{"class":325},[315,1679,650],{"class":394},[315,1681,653],{"class":325},[315,1683,404],{"class":362},[315,1685,1686,1688,1690,1692,1695,1697,1700,1702,1705,1707,1709,1711,1713,1715],{"class":317,"line":506},[315,1687,538],{"class":358},[315,1689,631],{"class":362},[315,1691,634],{"class":321},[315,1693,1694],{"class":325}," \"score 80 is \"",[315,1696,640],{"class":321},[315,1698,1699],{"class":358}," describe_score",[315,1701,363],{"class":362},[315,1703,1704],{"class":394},"80",[315,1706,464],{"class":362},[315,1708,634],{"class":321},[315,1710,647],{"class":325},[315,1712,650],{"class":394},[315,1714,653],{"class":325},[315,1716,404],{"class":362},[315,1718,1719,1721,1723,1725,1728,1730,1732,1734,1737,1739,1741,1743,1745,1747],{"class":317,"line":517},[315,1720,538],{"class":358},[315,1722,631],{"class":362},[315,1724,634],{"class":321},[315,1726,1727],{"class":325}," \"score 40 is \"",[315,1729,640],{"class":321},[315,1731,1699],{"class":358},[315,1733,363],{"class":362},[315,1735,1736],{"class":394},"40",[315,1738,464],{"class":362},[315,1740,634],{"class":321},[315,1742,647],{"class":325},[315,1744,650],{"class":394},[315,1746,653],{"class":325},[315,1748,404],{"class":362},[315,1750,1751],{"class":317,"line":522},[315,1752,349],{"emptyLinePlaceholder":348},[315,1754,1755],{"class":317,"line":529},[315,1756,1757],{"class":525},"    \u002F\u002F 返回 0 表示程序正常结束。\n",[315,1759,1760,1762,1764],{"class":317,"line":535},[315,1761,385],{"class":321},[315,1763,401],{"class":394},[315,1765,404],{"class":362},[315,1767,1768],{"class":317,"line":587},[315,1769,410],{"class":362},[14,1771,1772,854],{},[851,1773,853],{},[306,1775,1778],{"className":1776,"code":1777,"language":860,"meta":311},[858],"add(3, 5) = 8\nscore 80 is pass\nscore 40 is fail\n",[31,1779,1777],{"__ignoreMap":311},[298,1781,1783],{"id":1782},"示例-3按值捕獲和按引用捕獲","示例 3：按值捕獲和按引用捕獲",[14,1785,1786],{},"按值捕獲會保存定義 lambda 時的副本；按引用捕獲會訪問外部變量本身。",[306,1788,1790],{"className":308,"code":1789,"language":310,"meta":311,"style":311},"#include \u003Ciostream>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    int score = 10;\n\n    auto add_by_value = [score](int bonus) {\n        return score + bonus;\n    };\n\n    auto add_by_ref = [&score](int bonus) {\n        score += bonus;\n        return score;\n    };\n\n    score = 20;\n\n    std::cout \u003C\u003C \"value capture result = \" \u003C\u003C add_by_value(5) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"ref capture result = \" \u003C\u003C add_by_ref(5) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"score after ref capture = \" \u003C\u003C score \u003C\u003C \"\\n\";\n\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[31,1791,1792,1798,1802,1810,1814,1818,1832,1836,1860,1871,1875,1879,1903,1913,1920,1924,1928,1940,1944,1976,2008,2033,2037,2041,2049],{"__ignoreMap":311},[315,1793,1794,1796],{"class":317,"line":318},[315,1795,322],{"class":321},[315,1797,334],{"class":325},[315,1799,1800],{"class":317,"line":329},[315,1801,349],{"emptyLinePlaceholder":348},[315,1803,1804,1806,1808],{"class":317,"line":337},[315,1805,366],{"class":321},[315,1807,511],{"class":358},[315,1809,514],{"class":362},[315,1811,1812],{"class":317,"line":345},[315,1813,379],{"class":362},[315,1815,1816],{"class":317,"line":352},[315,1817,526],{"class":525},[315,1819,1820,1822,1825,1827,1830],{"class":317,"line":376},[315,1821,435],{"class":321},[315,1823,1824],{"class":362}," score ",[315,1826,550],{"class":321},[315,1828,1829],{"class":394}," 10",[315,1831,404],{"class":362},[315,1833,1834],{"class":317,"line":382},[315,1835,349],{"emptyLinePlaceholder":348},[315,1837,1838,1840,1843,1845,1848,1851,1853,1855,1858],{"class":317,"line":407},[315,1839,1525],{"class":321},[315,1841,1842],{"class":362}," add_by_value ",[315,1844,550],{"class":321},[315,1846,1847],{"class":362}," [",[315,1849,1850],{"class":369},"score",[315,1852,777],{"class":362},[315,1854,366],{"class":321},[315,1856,1857],{"class":369}," bonus",[315,1859,784],{"class":362},[315,1861,1862,1864,1866,1868],{"class":317,"line":413},[315,1863,479],{"class":321},[315,1865,1824],{"class":362},[315,1867,1557],{"class":321},[315,1869,1870],{"class":362}," bonus;\n",[315,1872,1873],{"class":317,"line":418},[315,1874,1565],{"class":362},[315,1876,1877],{"class":317,"line":427},[315,1878,349],{"emptyLinePlaceholder":348},[315,1880,1881,1883,1886,1888,1890,1893,1895,1897,1899,1901],{"class":317,"line":432},[315,1882,1525],{"class":321},[315,1884,1885],{"class":362}," add_by_ref ",[315,1887,550],{"class":321},[315,1889,1847],{"class":362},[315,1891,1892],{"class":321},"&",[315,1894,1850],{"class":369},[315,1896,777],{"class":362},[315,1898,366],{"class":321},[315,1900,1857],{"class":369},[315,1902,784],{"class":362},[315,1904,1905,1908,1911],{"class":317,"line":441},[315,1906,1907],{"class":362},"        score ",[315,1909,1910],{"class":321},"+=",[315,1912,1870],{"class":362},[315,1914,1915,1917],{"class":317,"line":446},[315,1916,479],{"class":321},[315,1918,1919],{"class":362}," score;\n",[315,1921,1922],{"class":317,"line":470},[315,1923,1565],{"class":362},[315,1925,1926],{"class":317,"line":476},[315,1927,349],{"emptyLinePlaceholder":348},[315,1929,1930,1933,1935,1938],{"class":317,"line":489},[315,1931,1932],{"class":362},"    score ",[315,1934,550],{"class":321},[315,1936,1937],{"class":394}," 20",[315,1939,404],{"class":362},[315,1941,1942],{"class":317,"line":495},[315,1943,349],{"emptyLinePlaceholder":348},[315,1945,1946,1948,1950,1952,1955,1957,1960,1962,1964,1966,1968,1970,1972,1974],{"class":317,"line":501},[315,1947,538],{"class":358},[315,1949,631],{"class":362},[315,1951,634],{"class":321},[315,1953,1954],{"class":325}," \"value capture result = \"",[315,1956,640],{"class":321},[315,1958,1959],{"class":358}," add_by_value",[315,1961,363],{"class":362},[315,1963,577],{"class":394},[315,1965,464],{"class":362},[315,1967,634],{"class":321},[315,1969,647],{"class":325},[315,1971,650],{"class":394},[315,1973,653],{"class":325},[315,1975,404],{"class":362},[315,1977,1978,1980,1982,1984,1987,1989,1992,1994,1996,1998,2000,2002,2004,2006],{"class":317,"line":506},[315,1979,538],{"class":358},[315,1981,631],{"class":362},[315,1983,634],{"class":321},[315,1985,1986],{"class":325}," \"ref capture result = \"",[315,1988,640],{"class":321},[315,1990,1991],{"class":358}," add_by_ref",[315,1993,363],{"class":362},[315,1995,577],{"class":394},[315,1997,464],{"class":362},[315,1999,634],{"class":321},[315,2001,647],{"class":325},[315,2003,650],{"class":394},[315,2005,653],{"class":325},[315,2007,404],{"class":362},[315,2009,2010,2012,2014,2016,2019,2021,2023,2025,2027,2029,2031],{"class":317,"line":517},[315,2011,538],{"class":358},[315,2013,631],{"class":362},[315,2015,634],{"class":321},[315,2017,2018],{"class":325}," \"score after ref capture = \"",[315,2020,640],{"class":321},[315,2022,1824],{"class":362},[315,2024,634],{"class":321},[315,2026,647],{"class":325},[315,2028,650],{"class":394},[315,2030,653],{"class":325},[315,2032,404],{"class":362},[315,2034,2035],{"class":317,"line":522},[315,2036,349],{"emptyLinePlaceholder":348},[315,2038,2039],{"class":317,"line":529},[315,2040,1757],{"class":525},[315,2042,2043,2045,2047],{"class":317,"line":535},[315,2044,385],{"class":321},[315,2046,401],{"class":394},[315,2048,404],{"class":362},[315,2050,2051],{"class":317,"line":587},[315,2052,410],{"class":362},[14,2054,2055,854],{},[851,2056,853],{},[306,2058,2061],{"className":2059,"code":2060,"language":860,"meta":311},[858],"value capture result = 15\nref capture result = 25\nscore after ref capture = 25\n",[31,2062,2060],{"__ignoreMap":311},[298,2064,2066],{"id":2065},"示例-4mutable-允許修改按值捕獲的副本","示例 4：mutable 允許修改按值捕獲的副本",[14,2068,2069,2070,2073],{},"按值捕獲的變量默認在 lambda 內是隻讀的。加上 ",[31,2071,2072],{},"mutable"," 後，可以修改 lambda 自己保存的副本，但不會修改外部變量。",[306,2075,2077],{"className":308,"code":2076,"language":310,"meta":311,"style":311},"#include \u003Ciostream>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    int start = 0;\n\n    auto counter = [start]() mutable {\n        ++start;\n        return start;\n    };\n\n    std::cout \u003C\u003C \"counter() = \" \u003C\u003C counter() \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"counter() = \" \u003C\u003C counter() \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"outside start = \" \u003C\u003C start \u003C\u003C \"\\n\";\n\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[31,2078,2079,2085,2089,2097,2101,2105,2118,2122,2143,2150,2157,2161,2165,2194,2220,2245,2249,2253,2261],{"__ignoreMap":311},[315,2080,2081,2083],{"class":317,"line":318},[315,2082,322],{"class":321},[315,2084,334],{"class":325},[315,2086,2087],{"class":317,"line":329},[315,2088,349],{"emptyLinePlaceholder":348},[315,2090,2091,2093,2095],{"class":317,"line":337},[315,2092,366],{"class":321},[315,2094,511],{"class":358},[315,2096,514],{"class":362},[315,2098,2099],{"class":317,"line":345},[315,2100,379],{"class":362},[315,2102,2103],{"class":317,"line":352},[315,2104,526],{"class":525},[315,2106,2107,2109,2112,2114,2116],{"class":317,"line":376},[315,2108,435],{"class":321},[315,2110,2111],{"class":362}," start ",[315,2113,550],{"class":321},[315,2115,401],{"class":394},[315,2117,404],{"class":362},[315,2119,2120],{"class":317,"line":382},[315,2121,349],{"emptyLinePlaceholder":348},[315,2123,2124,2126,2129,2131,2133,2136,2139,2141],{"class":317,"line":407},[315,2125,1525],{"class":321},[315,2127,2128],{"class":362}," counter ",[315,2130,550],{"class":321},[315,2132,1847],{"class":362},[315,2134,2135],{"class":369},"start",[315,2137,2138],{"class":362},"]() ",[315,2140,2072],{"class":321},[315,2142,1594],{"class":362},[315,2144,2145,2147],{"class":317,"line":413},[315,2146,1156],{"class":321},[315,2148,2149],{"class":362},"start;\n",[315,2151,2152,2154],{"class":317,"line":418},[315,2153,479],{"class":321},[315,2155,2156],{"class":362}," start;\n",[315,2158,2159],{"class":317,"line":427},[315,2160,1565],{"class":362},[315,2162,2163],{"class":317,"line":432},[315,2164,349],{"emptyLinePlaceholder":348},[315,2166,2167,2169,2171,2173,2176,2178,2181,2184,2186,2188,2190,2192],{"class":317,"line":441},[315,2168,538],{"class":358},[315,2170,631],{"class":362},[315,2172,634],{"class":321},[315,2174,2175],{"class":325}," \"counter() = \"",[315,2177,640],{"class":321},[315,2179,2180],{"class":358}," counter",[315,2182,2183],{"class":362},"() ",[315,2185,634],{"class":321},[315,2187,647],{"class":325},[315,2189,650],{"class":394},[315,2191,653],{"class":325},[315,2193,404],{"class":362},[315,2195,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218],{"class":317,"line":446},[315,2197,538],{"class":358},[315,2199,631],{"class":362},[315,2201,634],{"class":321},[315,2203,2175],{"class":325},[315,2205,640],{"class":321},[315,2207,2180],{"class":358},[315,2209,2183],{"class":362},[315,2211,634],{"class":321},[315,2213,647],{"class":325},[315,2215,650],{"class":394},[315,2217,653],{"class":325},[315,2219,404],{"class":362},[315,2221,2222,2224,2226,2228,2231,2233,2235,2237,2239,2241,2243],{"class":317,"line":470},[315,2223,538],{"class":358},[315,2225,631],{"class":362},[315,2227,634],{"class":321},[315,2229,2230],{"class":325}," \"outside start = \"",[315,2232,640],{"class":321},[315,2234,2111],{"class":362},[315,2236,634],{"class":321},[315,2238,647],{"class":325},[315,2240,650],{"class":394},[315,2242,653],{"class":325},[315,2244,404],{"class":362},[315,2246,2247],{"class":317,"line":476},[315,2248,349],{"emptyLinePlaceholder":348},[315,2250,2251],{"class":317,"line":489},[315,2252,1757],{"class":525},[315,2254,2255,2257,2259],{"class":317,"line":495},[315,2256,385],{"class":321},[315,2258,401],{"class":394},[315,2260,404],{"class":362},[315,2262,2263],{"class":317,"line":501},[315,2264,410],{"class":362},[14,2266,2267,854],{},[851,2268,853],{},[306,2270,2273],{"className":2271,"code":2272,"language":860,"meta":311},[858],"counter() = 1\ncounter() = 2\noutside start = 0\n",[31,2274,2272],{"__ignoreMap":311},[864,2276,2278,2279,2282],{"id":2277},"爲什麼連續調用-counter-會繼續累加","爲什麼連續調用 ",[31,2280,2281],{},"counter()"," 會繼續累加？",[14,2284,2285,2286,2288,2289,2292,2293,146],{},"這裏不是因爲外部 ",[31,2287,2135],{}," 的作用域變大了，而是因爲 Lambda 對象 ",[31,2290,2291],{},"counter"," 自己保存了一份 ",[31,2294,2135],{},[306,2296,2298],{"className":308,"code":2297,"language":310,"meta":311,"style":311},"int start = 0;\n\nauto counter = [start]() mutable {\n    ++start;\n    return start;\n};\n",[31,2299,2300,2312,2316,2334,2341,2347],{"__ignoreMap":311},[315,2301,2302,2304,2306,2308,2310],{"class":317,"line":318},[315,2303,366],{"class":321},[315,2305,2111],{"class":362},[315,2307,550],{"class":321},[315,2309,401],{"class":394},[315,2311,404],{"class":362},[315,2313,2314],{"class":317,"line":329},[315,2315,349],{"emptyLinePlaceholder":348},[315,2317,2318,2320,2322,2324,2326,2328,2330,2332],{"class":317,"line":337},[315,2319,145],{"class":321},[315,2321,2128],{"class":362},[315,2323,550],{"class":321},[315,2325,1847],{"class":362},[315,2327,2135],{"class":369},[315,2329,2138],{"class":362},[315,2331,2072],{"class":321},[315,2333,1594],{"class":362},[315,2335,2336,2339],{"class":317,"line":345},[315,2337,2338],{"class":321},"    ++",[315,2340,2149],{"class":362},[315,2342,2343,2345],{"class":317,"line":352},[315,2344,385],{"class":321},[315,2346,2156],{"class":362},[315,2348,2349],{"class":317,"line":376},[315,2350,498],{"class":362},[14,2352,2353,2356],{},[31,2354,2355],{},"[start]"," 是按值捕獲。可以近似理解爲編譯器生成了這樣的對象：",[306,2358,2360],{"className":308,"code":2359,"language":310,"meta":311,"style":311},"struct Counter\n{\n    int start;\n\n    int operator()()\n    {\n        ++start;\n        return start;\n    }\n};\n\nCounter counter{start};\n",[31,2361,2362,2369,2373,2379,2383,2393,2397,2403,2409,2413,2417,2421],{"__ignoreMap":311},[315,2363,2364,2366],{"class":317,"line":318},[315,2365,421],{"class":321},[315,2367,2368],{"class":358}," Counter\n",[315,2370,2371],{"class":317,"line":329},[315,2372,379],{"class":362},[315,2374,2375,2377],{"class":317,"line":337},[315,2376,435],{"class":321},[315,2378,2156],{"class":362},[315,2380,2381],{"class":317,"line":345},[315,2382,349],{"emptyLinePlaceholder":348},[315,2384,2385,2387,2389,2391],{"class":317,"line":352},[315,2386,435],{"class":321},[315,2388,452],{"class":321},[315,2390,455],{"class":358},[315,2392,514],{"class":362},[315,2394,2395],{"class":317,"line":376},[315,2396,473],{"class":362},[315,2398,2399,2401],{"class":317,"line":382},[315,2400,1156],{"class":321},[315,2402,2149],{"class":362},[315,2404,2405,2407],{"class":317,"line":407},[315,2406,479],{"class":321},[315,2408,2156],{"class":362},[315,2410,2411],{"class":317,"line":413},[315,2412,492],{"class":362},[315,2414,2415],{"class":317,"line":418},[315,2416,498],{"class":362},[315,2418,2419],{"class":317,"line":427},[315,2420,349],{"emptyLinePlaceholder":348},[315,2422,2423],{"class":317,"line":432},[315,2424,2425],{"class":362},"Counter counter{start};\n",[14,2427,2428,2429,854],{},"因此程序中實際上有兩個不同的 ",[31,2430,2135],{},[135,2432,2433,2442],{},[21,2434,2435,2436,2438,2439,146],{},"外部 ",[31,2437,2135],{},"：始終還是 ",[31,2440,2441],{},"0",[21,2443,2444,2446,2447,2449,2450,2452,2453,146],{},[31,2445,2291],{}," 內部保存的 ",[31,2448,2135],{},"：第一次調用變成 ",[31,2451,556],{},"，第二次調用繼續變成 ",[31,2454,562],{},[306,2456,2458],{"className":308,"code":2457,"language":310,"meta":311,"style":311},"counter();  \u002F\u002F 内部 start：0 -> 1\ncounter();  \u002F\u002F 内部 start：1 -> 2\n",[31,2459,2460,2470],{"__ignoreMap":311},[315,2461,2462,2464,2467],{"class":317,"line":318},[315,2463,2291],{"class":358},[315,2465,2466],{"class":362},"();",[315,2468,2469],{"class":525},"  \u002F\u002F 内部 start：0 -> 1\n",[315,2471,2472,2474,2476],{"class":317,"line":329},[315,2473,2291],{"class":358},[315,2475,2466],{"class":362},[315,2477,2478],{"class":525},"  \u002F\u002F 内部 start：1 -> 2\n",[14,2480,2481],{},"關鍵在於：",[306,2483,2485],{"className":308,"code":2484,"language":310,"meta":311,"style":311},"auto counter = [start]() mutable { ... };\n",[31,2486,2487],{"__ignoreMap":311},[315,2488,2489,2491,2493,2495,2497,2499,2501,2503],{"class":317,"line":318},[315,2490,145],{"class":321},[315,2492,2128],{"class":362},[315,2494,550],{"class":321},[315,2496,1847],{"class":362},[315,2498,2135],{"class":369},[315,2500,2138],{"class":362},[315,2502,2072],{"class":321},[315,2504,2505],{"class":362}," { ... };\n",[14,2507,2508,2509,2511,2512,2515,2516,146],{},"這裏只創建了一次 Lambda 對象。後面的兩個 ",[31,2510,2281],{}," 都是在調用",[851,2513,2514],{},"同一個對象","，不會每次調用時重新捕獲一次外部 ",[31,2517,2135],{},[14,2519,2520,2522,2523,2525],{},[31,2521,2072],{}," 的作用則是允許修改 Lambda 內部按值捕獲的副本，它並不會讓外部的 ",[31,2524,2135],{}," 一起變化。",[298,2527,2529],{"id":2528},"示例-5lambda-配合-stl-算法","示例 5：lambda 配合 STL 算法",[14,2531,2532],{},"Lambda 和 STL 算法配合時最常見：排序、查找、計數、轉換都可以把局部邏輯直接寫在調用處。",[306,2534,2536],{"className":308,"code":2535,"language":310,"meta":311,"style":311},"#include \u003Calgorithm>\n#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cvector>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    \u002F\u002F vector 是动态数组，元素数量可以在运行时变化。\n    std::vector\u003Cstd::string> names = {\"Bob\", \"Alice\", \"Charlie\", \"David\"};\n\n    std::sort(names.begin(), names.end(),\n              [](const std::string& a, const std::string& b) {\n                  if (a.size() == b.size())\n                  {\n                      return a \u003C b;\n                  }\n                  return a.size() \u003C b.size();\n              });\n\n    std::cout \u003C\u003C \"sort by length: \";\n    for (const auto& name : names)\n    {\n        std::cout \u003C\u003C name \u003C\u003C \" \";\n    }\n    std::cout \u003C\u003C \"\\n\";\n\n    int min_length = 6;\n    auto it = std::find_if(names.begin(), names.end(),\n                           [min_length](const std::string& name) {\n                               return name.size() >= static_cast\u003Cstd::size_t>(min_length);\n                           });\n\n    if (it != names.end())\n    {\n        std::cout \u003C\u003C \"first long name = \" \u003C\u003C *it \u003C\u003C \"\\n\";\n    }\n\n    return 0;\n}\n",[31,2537,2538,2544,2550,2556,2562,2566,2574,2578,2582,2586,2629,2633,2654,2689,2713,2718,2729,2734,2754,2758,2762,2775,2791,2795,2814,2818,2834,2838,2852,2878,2903,2930,2935,2939,2956,2960,2989,2993,2997,3005],{"__ignoreMap":311},[315,2539,2540,2542],{"class":317,"line":318},[315,2541,322],{"class":321},[315,2543,326],{"class":325},[315,2545,2546,2548],{"class":317,"line":329},[315,2547,322],{"class":321},[315,2549,334],{"class":325},[315,2551,2552,2554],{"class":317,"line":337},[315,2553,322],{"class":321},[315,2555,1500],{"class":325},[315,2557,2558,2560],{"class":317,"line":345},[315,2559,322],{"class":321},[315,2561,342],{"class":325},[315,2563,2564],{"class":317,"line":352},[315,2565,349],{"emptyLinePlaceholder":348},[315,2567,2568,2570,2572],{"class":317,"line":376},[315,2569,366],{"class":321},[315,2571,511],{"class":358},[315,2573,514],{"class":362},[315,2575,2576],{"class":317,"line":382},[315,2577,379],{"class":362},[315,2579,2580],{"class":317,"line":407},[315,2581,526],{"class":525},[315,2583,2584],{"class":317,"line":413},[315,2585,532],{"class":525},[315,2587,2588,2590,2592,2595,2597,2600,2602,2605,2607,2609,2612,2614,2617,2619,2622,2624,2627],{"class":317,"line":418},[315,2589,538],{"class":358},[315,2591,541],{"class":362},[315,2593,2594],{"class":321},"\u003C",[315,2596,930],{"class":358},[315,2598,2599],{"class":362},"::string",[315,2601,484],{"class":321},[315,2603,2604],{"class":362}," names ",[315,2606,550],{"class":321},[315,2608,553],{"class":362},[315,2610,2611],{"class":325},"\"Bob\"",[315,2613,559],{"class":362},[315,2615,2616],{"class":325},"\"Alice\"",[315,2618,559],{"class":362},[315,2620,2621],{"class":325},"\"Charlie\"",[315,2623,559],{"class":362},[315,2625,2626],{"class":325},"\"David\"",[315,2628,498],{"class":362},[315,2630,2631],{"class":317,"line":427},[315,2632,349],{"emptyLinePlaceholder":348},[315,2634,2635,2637,2639,2642,2645,2647,2650,2652],{"class":317,"line":432},[315,2636,538],{"class":358},[315,2638,605],{"class":362},[315,2640,2641],{"class":358},"sort",[315,2643,2644],{"class":362},"(names.",[315,2646,614],{"class":358},[315,2648,2649],{"class":362},"(), names.",[315,2651,620],{"class":358},[315,2653,765],{"class":362},[315,2655,2656,2659,2662,2664,2666,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687],{"class":317,"line":441},[315,2657,2658],{"class":362},"              [](",[315,2660,2661],{"class":321},"const",[315,2663,602],{"class":358},[315,2665,605],{"class":362},[315,2667,2668],{"class":358},"string",[315,2670,1892],{"class":321},[315,2672,1538],{"class":369},[315,2674,559],{"class":362},[315,2676,2661],{"class":321},[315,2678,602],{"class":358},[315,2680,605],{"class":362},[315,2682,2668],{"class":358},[315,2684,1892],{"class":321},[315,2686,1545],{"class":369},[315,2688,784],{"class":362},[315,2690,2691,2694,2697,2700,2702,2705,2708,2710],{"class":317,"line":446},[315,2692,2693],{"class":321},"                  if",[315,2695,2696],{"class":362}," (a.",[315,2698,2699],{"class":358},"size",[315,2701,2183],{"class":362},[315,2703,2704],{"class":321},"==",[315,2706,2707],{"class":362}," b.",[315,2709,2699],{"class":358},[315,2711,2712],{"class":362},"())\n",[315,2714,2715],{"class":317,"line":470},[315,2716,2717],{"class":362},"                  {\n",[315,2719,2720,2723,2725,2727],{"class":317,"line":476},[315,2721,2722],{"class":321},"                      return",[315,2724,1554],{"class":362},[315,2726,2594],{"class":321},[315,2728,1560],{"class":362},[315,2730,2731],{"class":317,"line":489},[315,2732,2733],{"class":362},"                  }\n",[315,2735,2736,2738,2741,2743,2745,2747,2749,2751],{"class":317,"line":495},[315,2737,1329],{"class":321},[315,2739,2740],{"class":362}," a.",[315,2742,2699],{"class":358},[315,2744,2183],{"class":362},[315,2746,2594],{"class":321},[315,2748,2707],{"class":362},[315,2750,2699],{"class":358},[315,2752,2753],{"class":362},"();\n",[315,2755,2756],{"class":317,"line":501},[315,2757,1340],{"class":362},[315,2759,2760],{"class":317,"line":506},[315,2761,349],{"emptyLinePlaceholder":348},[315,2763,2764,2766,2768,2770,2773],{"class":317,"line":517},[315,2765,538],{"class":358},[315,2767,631],{"class":362},[315,2769,634],{"class":321},[315,2771,2772],{"class":325}," \"sort by length: \"",[315,2774,404],{"class":362},[315,2776,2777,2780,2783,2785,2788],{"class":317,"line":522},[315,2778,2779],{"class":321},"    for",[315,2781,2782],{"class":362}," (",[315,2784,2661],{"class":321},[315,2786,2787],{"class":321}," auto&",[315,2789,2790],{"class":362}," name : names)\n",[315,2792,2793],{"class":317,"line":529},[315,2794,473],{"class":362},[315,2796,2797,2800,2802,2804,2807,2809,2812],{"class":317,"line":535},[315,2798,2799],{"class":358},"        std",[315,2801,631],{"class":362},[315,2803,634],{"class":321},[315,2805,2806],{"class":362}," name ",[315,2808,634],{"class":321},[315,2810,2811],{"class":325}," \" \"",[315,2813,404],{"class":362},[315,2815,2816],{"class":317,"line":587},[315,2817,492],{"class":362},[315,2819,2820,2822,2824,2826,2828,2830,2832],{"class":317,"line":592},[315,2821,538],{"class":358},[315,2823,631],{"class":362},[315,2825,634],{"class":321},[315,2827,647],{"class":325},[315,2829,650],{"class":394},[315,2831,653],{"class":325},[315,2833,404],{"class":362},[315,2835,2836],{"class":317,"line":626},[315,2837,349],{"emptyLinePlaceholder":348},[315,2839,2840,2842,2845,2847,2850],{"class":317,"line":658},[315,2841,435],{"class":321},[315,2843,2844],{"class":362}," min_length ",[315,2846,550],{"class":321},[315,2848,2849],{"class":394}," 6",[315,2851,404],{"class":362},[315,2853,2854,2856,2859,2861,2863,2865,2868,2870,2872,2874,2876],{"class":317,"line":663},[315,2855,1525],{"class":321},[315,2857,2858],{"class":362}," it ",[315,2860,550],{"class":321},[315,2862,602],{"class":358},[315,2864,605],{"class":362},[315,2866,2867],{"class":358},"find_if",[315,2869,2644],{"class":362},[315,2871,614],{"class":358},[315,2873,2649],{"class":362},[315,2875,620],{"class":358},[315,2877,765],{"class":362},[315,2879,2880,2883,2886,2888,2890,2892,2894,2896,2898,2901],{"class":317,"line":695},[315,2881,2882],{"class":362},"                           [",[315,2884,2885],{"class":369},"min_length",[315,2887,777],{"class":362},[315,2889,2661],{"class":321},[315,2891,602],{"class":358},[315,2893,605],{"class":362},[315,2895,2668],{"class":358},[315,2897,1892],{"class":321},[315,2899,2900],{"class":369}," name",[315,2902,784],{"class":362},[315,2904,2905,2908,2911,2913,2915,2917,2920,2922,2924,2927],{"class":317,"line":721},[315,2906,2907],{"class":321},"                               return",[315,2909,2910],{"class":362}," name.",[315,2912,2699],{"class":358},[315,2914,2183],{"class":362},[315,2916,1605],{"class":321},[315,2918,2919],{"class":321}," static_cast\u003C",[315,2921,930],{"class":358},[315,2923,605],{"class":362},[315,2925,2926],{"class":321},"size_t>",[315,2928,2929],{"class":362},"(min_length);\n",[315,2931,2932],{"class":317,"line":726},[315,2933,2934],{"class":362},"                           });\n",[315,2936,2937],{"class":317,"line":741},[315,2938,349],{"emptyLinePlaceholder":348},[315,2940,2941,2943,2946,2949,2952,2954],{"class":317,"line":768},[315,2942,1144],{"class":321},[315,2944,2945],{"class":362}," (it ",[315,2947,2948],{"class":321},"!=",[315,2950,2951],{"class":362}," names.",[315,2953,620],{"class":358},[315,2955,2712],{"class":362},[315,2957,2958],{"class":317,"line":787},[315,2959,473],{"class":362},[315,2961,2962,2964,2966,2968,2971,2973,2976,2979,2981,2983,2985,2987],{"class":317,"line":799},[315,2963,2799],{"class":358},[315,2965,631],{"class":362},[315,2967,634],{"class":321},[315,2969,2970],{"class":325}," \"first long name = \"",[315,2972,640],{"class":321},[315,2974,2975],{"class":321}," *",[315,2977,2978],{"class":362},"it ",[315,2980,634],{"class":321},[315,2982,647],{"class":325},[315,2984,650],{"class":394},[315,2986,653],{"class":325},[315,2988,404],{"class":362},[315,2990,2991],{"class":317,"line":805},[315,2992,492],{"class":362},[315,2994,2995],{"class":317,"line":831},[315,2996,349],{"emptyLinePlaceholder":348},[315,2998,2999,3001,3003],{"class":317,"line":836},[315,3000,385],{"class":321},[315,3002,401],{"class":394},[315,3004,404],{"class":362},[315,3006,3007],{"class":317,"line":845},[315,3008,410],{"class":362},[14,3010,3011,854],{},[851,3012,853],{},[306,3014,3017],{"className":3015,"code":3016,"language":860,"meta":311},[858],"sort by length: Bob Alice David Charlie\nfirst long name = Charlie\n",[31,3018,3016],{"__ignoreMap":311},[864,3020,3022],{"id":3021},"示例中使用的-api-和語法","示例中使用的 API 和語法",[14,3024,3025],{},"這個示例除了 Lambda，還使用了一些常見的 STL API。",[48,3027,3028,3037],{},[51,3029,3030],{},[54,3031,3032,3034],{},[57,3033,176],{"align":59},[57,3035,3036],{"align":59},"簡單說明",[68,3038,3039,3049,3059,3073,3083,3093,3103,3116,3125,3135,3152,3162],{},[54,3040,3041,3046],{},[73,3042,3043],{"align":59},[31,3044,3045],{},"std::vector\u003Cstd::string>",[73,3047,3048],{"align":59},"動態數組，這裏用於保存多個字符串",[54,3050,3051,3056],{},[73,3052,3053],{"align":59},[31,3054,3055],{},"names.begin()",[73,3057,3058],{"align":59},"返回指向第一個元素的迭代器",[54,3060,3061,3066],{},[73,3062,3063],{"align":59},[31,3064,3065],{},"names.end()",[73,3067,3068,3069,3072],{"align":59},"返回最後一個元素",[851,3070,3071],{},"後一個位置","的迭代器",[54,3074,3075,3080],{},[73,3076,3077],{"align":59},[31,3078,3079],{},"std::sort(begin, end, rule)",[73,3081,3082],{"align":59},"對指定範圍排序，第三個參數指定比較規則",[54,3084,3085,3090],{},[73,3086,3087],{"align":59},[31,3088,3089],{},"string.size()",[73,3091,3092],{"align":59},"返回字符串長度",[54,3094,3095,3100],{},[73,3096,3097],{"align":59},[31,3098,3099],{},"const std::string&",[73,3101,3102],{"align":59},"只讀引用字符串，避免額外複製",[54,3104,3105,3110],{},[73,3106,3107],{"align":59},[31,3108,3109],{},"for (const auto& x : container)",[73,3111,3112,3113,3115],{"align":59},"範圍 ",[31,3114,1132],{},"，依次訪問容器中的每個元素",[54,3117,3118,3122],{},[73,3119,3120],{"align":59},[31,3121,145],{},[73,3123,3124],{"align":59},"讓編譯器自動推導變量類型",[54,3126,3127,3132],{},[73,3128,3129],{"align":59},[31,3130,3131],{},"std::find_if(begin, end, rule)",[73,3133,3134],{"align":59},"查找第一個滿足條件的元素",[54,3136,3137,3142],{},[73,3138,3139],{"align":59},[31,3140,3141],{},"static_cast\u003CT>(value)",[73,3143,3144,3145,3148,3149],{"align":59},"將 ",[31,3146,3147],{},"value"," 顯式轉換爲類型 ",[31,3150,3151],{},"T",[54,3153,3154,3159],{},[73,3155,3156],{"align":59},[31,3157,3158],{},"std::size_t",[73,3160,3161],{"align":59},"STL 中常用於表示大小、數量和下標的無符號整數類型",[54,3163,3164,3169],{},[73,3165,3166],{"align":59},[31,3167,3168],{},"*it",[73,3170,3171,3172,3175],{"align":59},"取得迭代器 ",[31,3173,3174],{},"it"," 當前指向的元素",[14,3177,3178,3179,3182,3183,3186],{},"其中 ",[31,3180,3181],{},"begin()"," 和 ",[31,3184,3185],{},"end()"," 經常一起出現：",[306,3188,3190],{"className":308,"code":3189,"language":310,"meta":311,"style":311},"names.begin(), names.end()\n",[31,3191,3192],{"__ignoreMap":311},[315,3193,3194,3197,3199,3201,3203],{"class":317,"line":318},[315,3195,3196],{"class":362},"names.",[315,3198,614],{"class":358},[315,3200,2649],{"class":362},[315,3202,620],{"class":358},[315,3204,514],{"class":362},[14,3206,3207,3208,3211,3212,3214],{},"表示整個 ",[31,3209,3210],{},"names"," 的遍歷範圍。需要注意，",[31,3213,3185],{}," 並不指向最後一個元素，而是最後一個元素後面的結束位置：",[306,3216,3219],{"className":3217,"code":3218,"language":860,"meta":311},[858],"Bob    Alice    David    Charlie    [结束位置]\n ↑                                      ↑\nbegin()                                end()\n",[31,3220,3218],{"__ignoreMap":311},[864,3222,3224],{"id":3223},"stl-算法爲什麼要接收一個規則函數","STL 算法爲什麼要接收一個“規則函數”？",[14,3226,3227,3229,3230,3229,3233,3236],{},[31,3228,906],{},"、",[31,3231,3232],{},"std::find_if",[31,3234,3235],{},"std::sort"," 有一個共同特點：",[909,3238,3239],{},[14,3240,3241],{},[851,3242,3243],{},"算法自己負責“怎麼做”，你提供的函數負責“按照什麼規則做”。",[14,3245,3246,3247,3249],{},"例如 ",[31,3248,3235],{}," 自己知道排序算法應該怎樣移動和比較元素，但是它不知道你希望按照數值大小、字符串長度還是其他規則排序。",[14,3251,3252,3253,3255],{},"同樣，",[31,3254,3232],{}," 自己知道怎樣從前往後查找，但是它不知道“什麼樣的元素纔算你要找的元素”。",[14,3257,3258],{},"因此這些算法會接收一個可調用對象，並在運行過程中反覆調用它。",[14,3260,3261],{},"在示例 1 中已經看到：",[306,3263,3265],{"className":308,"code":3264,"language":310,"meta":311,"style":311},"std::count_if(begin, end, rule);\n",[31,3266,3267],{"__ignoreMap":311},[315,3268,3269,3271,3273,3275],{"class":317,"line":318},[315,3270,930],{"class":358},[315,3272,605],{"class":362},[315,3274,608],{"class":358},[315,3276,3277],{"class":362},"(begin, end, rule);\n",[14,3279,3280],{},"它會對每個元素調用：",[306,3282,3284],{"className":308,"code":3283,"language":310,"meta":311,"style":311},"rule(element);\n",[31,3285,3286],{"__ignoreMap":311},[315,3287,3288,3291],{"class":317,"line":318},[315,3289,3290],{"class":358},"rule",[315,3292,3293],{"class":362},"(element);\n",[14,3295,3296],{},"第三個參數回答的是：",[909,3298,3299],{},[14,3300,3301],{},[851,3302,3303],{},"這個元素算不算？",[14,3305,3306,3182,3308,3310],{},[31,3307,2867],{},[31,3309,2641],{}," 使用的是同一種設計思想，只是它們向規則函數提出的問題不同。",[864,3312,3314,3316],{"id":3313},"stdfind_if這個元素是不是我要找的",[31,3315,3232],{},"：這個元素是不是我要找的？",[14,3318,3319],{},"基本形式是：",[306,3321,3323],{"className":308,"code":3322,"language":310,"meta":311,"style":311},"std::find_if(起点, 终点, 判断规则);\n",[31,3324,3325],{"__ignoreMap":311},[315,3326,3327,3329,3331,3333],{"class":317,"line":318},[315,3328,930],{"class":358},[315,3330,605],{"class":362},[315,3332,2867],{"class":358},[315,3334,937],{"class":362},[14,3336,3337],{},"示例中：",[306,3339,3341],{"className":308,"code":3340,"language":310,"meta":311,"style":311},"auto it = std::find_if(names.begin(), names.end(),\n                       [min_length](const std::string& name) {\n                           return name.size() >= static_cast\u003Cstd::size_t>(min_length);\n                       });\n",[31,3342,3343,3367,3390,3413],{"__ignoreMap":311},[315,3344,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365],{"class":317,"line":318},[315,3346,145],{"class":321},[315,3348,2858],{"class":362},[315,3350,550],{"class":321},[315,3352,602],{"class":358},[315,3354,605],{"class":362},[315,3356,2867],{"class":358},[315,3358,2644],{"class":362},[315,3360,614],{"class":358},[315,3362,2649],{"class":362},[315,3364,620],{"class":358},[315,3366,765],{"class":362},[315,3368,3369,3372,3374,3376,3378,3380,3382,3384,3386,3388],{"class":317,"line":329},[315,3370,3371],{"class":362},"                       [",[315,3373,2885],{"class":369},[315,3375,777],{"class":362},[315,3377,2661],{"class":321},[315,3379,602],{"class":358},[315,3381,605],{"class":362},[315,3383,2668],{"class":358},[315,3385,1892],{"class":321},[315,3387,2900],{"class":369},[315,3389,784],{"class":362},[315,3391,3392,3395,3397,3399,3401,3403,3405,3407,3409,3411],{"class":317,"line":337},[315,3393,3394],{"class":321},"                           return",[315,3396,2910],{"class":362},[315,3398,2699],{"class":358},[315,3400,2183],{"class":362},[315,3402,1605],{"class":321},[315,3404,2919],{"class":321},[315,3406,930],{"class":358},[315,3408,605],{"class":362},[315,3410,2926],{"class":321},[315,3412,2929],{"class":362},[315,3414,3415],{"class":317,"line":345},[315,3416,3417],{"class":362},"                       });\n",[14,3419,3420,3423,3424,3426,3427,146],{},[31,3421,3422],{},"[min_length]"," 按值捕獲最小長度 ",[31,3425,582],{},"。這個 Lambda 接收一個字符串，並判斷它的長度是否至少爲 ",[31,3428,582],{},[14,3430,3431,3433],{},[31,3432,2867],{}," 會依次調用這個 Lambda，可以近似理解成：",[306,3435,3437],{"className":308,"code":3436,"language":310,"meta":311,"style":311},"rule(\"Bob\");      \u002F\u002F false\nrule(\"Alice\");    \u002F\u002F false\nrule(\"David\");    \u002F\u002F false\nrule(\"Charlie\");  \u002F\u002F true\n",[31,3438,3439,3452,3465,3477],{"__ignoreMap":311},[315,3440,3441,3443,3445,3447,3449],{"class":317,"line":318},[315,3442,3290],{"class":358},[315,3444,363],{"class":362},[315,3446,2611],{"class":325},[315,3448,1030],{"class":362},[315,3450,3451],{"class":525},"      \u002F\u002F false\n",[315,3453,3454,3456,3458,3460,3462],{"class":317,"line":329},[315,3455,3290],{"class":358},[315,3457,363],{"class":362},[315,3459,2616],{"class":325},[315,3461,1030],{"class":362},[315,3463,3464],{"class":525},"    \u002F\u002F false\n",[315,3466,3467,3469,3471,3473,3475],{"class":317,"line":337},[315,3468,3290],{"class":358},[315,3470,363],{"class":362},[315,3472,2626],{"class":325},[315,3474,1030],{"class":362},[315,3476,3464],{"class":525},[315,3478,3479,3481,3483,3485,3487],{"class":317,"line":345},[315,3480,3290],{"class":358},[315,3482,363],{"class":362},[315,3484,2621],{"class":325},[315,3486,1030],{"class":362},[315,3488,1401],{"class":525},[14,3490,3491,3492,3494,3495,3497],{},"一旦第一次得到 ",[31,3493,916],{},"，",[31,3496,2867],{}," 就停止查找，並返回當前元素的位置。",[14,3499,3500,3501,3503],{},"因此 ",[31,3502,2867],{}," 的第三個參數回答的是：",[909,3505,3506],{},[14,3507,3508],{},[851,3509,3510],{},"當前元素是不是我要找的？",[14,3512,3513,3514,3516],{},"它和 ",[31,3515,608],{}," 的規則函數形式很像，通常都是：",[306,3518,3520],{"className":308,"code":3519,"language":310,"meta":311,"style":311},"bool rule(一个元素);\n",[31,3521,3522],{"__ignoreMap":311},[315,3523,3524,3526,3529],{"class":317,"line":318},[315,3525,355],{"class":321},[315,3527,3528],{"class":358}," rule",[315,3530,3531],{"class":362},"(一个元素);\n",[14,3533,3534,3535,3537],{},"區別在於算法得到 ",[31,3536,916],{}," 之後做什麼：",[48,3539,3540,3553],{},[51,3541,3542],{},[54,3543,3544,3547],{},[57,3545,3546],{"align":59},"算法",[57,3548,3549,3550,3552],{"align":59},"規則返回 ",[31,3551,916],{}," 後的行爲",[68,3554,3555,3564],{},[54,3556,3557,3561],{},[73,3558,3559],{"align":59},[31,3560,608],{},[73,3562,3563],{"align":59},"計數加一，然後繼續檢查後面的元素",[54,3565,3566,3570],{},[73,3567,3568],{"align":59},[31,3569,2867],{},[73,3571,3572],{"align":59},"已經找到，立即停止並返回當前位置",[864,3574,3576,854,3578,3581,3582,3585],{"id":3575},"stdsorta-應不應該排在-b-前面",[31,3577,3235],{},[31,3579,3580],{},"a"," 應不應該排在 ",[31,3583,3584],{},"b"," 前面？",[14,3587,3588,3590],{},[31,3589,3235],{}," 稍微不同：",[306,3592,3594],{"className":308,"code":3593,"language":310,"meta":311,"style":311},"std::sort(起点, 终点, 比较规则);\n",[31,3595,3596],{"__ignoreMap":311},[315,3597,3598,3600,3602,3604],{"class":317,"line":318},[315,3599,930],{"class":358},[315,3601,605],{"class":362},[315,3603,2641],{"class":358},[315,3605,3606],{"class":362},"(起点, 终点, 比较规则);\n",[14,3608,3609,3610,854],{},"它的第三個參數一次接收",[851,3611,3612],{},"兩個元素",[306,3614,3616],{"className":308,"code":3615,"language":310,"meta":311,"style":311},"[](const std::string& a, const std::string& b) {\n    if (a.size() == b.size())\n    {\n        return a \u003C b;\n    }\n    return a.size() \u003C b.size();\n}\n",[31,3617,3618,3651,3669,3673,3683,3687,3705],{"__ignoreMap":311},[315,3619,3620,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649],{"class":317,"line":318},[315,3621,3622],{"class":362},"[](",[315,3624,2661],{"class":321},[315,3626,602],{"class":358},[315,3628,605],{"class":362},[315,3630,2668],{"class":358},[315,3632,1892],{"class":321},[315,3634,1538],{"class":369},[315,3636,559],{"class":362},[315,3638,2661],{"class":321},[315,3640,602],{"class":358},[315,3642,605],{"class":362},[315,3644,2668],{"class":358},[315,3646,1892],{"class":321},[315,3648,1545],{"class":369},[315,3650,784],{"class":362},[315,3652,3653,3655,3657,3659,3661,3663,3665,3667],{"class":317,"line":329},[315,3654,1144],{"class":321},[315,3656,2696],{"class":362},[315,3658,2699],{"class":358},[315,3660,2183],{"class":362},[315,3662,2704],{"class":321},[315,3664,2707],{"class":362},[315,3666,2699],{"class":358},[315,3668,2712],{"class":362},[315,3670,3671],{"class":317,"line":337},[315,3672,473],{"class":362},[315,3674,3675,3677,3679,3681],{"class":317,"line":345},[315,3676,479],{"class":321},[315,3678,1554],{"class":362},[315,3680,2594],{"class":321},[315,3682,1560],{"class":362},[315,3684,3685],{"class":317,"line":352},[315,3686,492],{"class":362},[315,3688,3689,3691,3693,3695,3697,3699,3701,3703],{"class":317,"line":376},[315,3690,385],{"class":321},[315,3692,2740],{"class":362},[315,3694,2699],{"class":358},[315,3696,2183],{"class":362},[315,3698,2594],{"class":321},[315,3700,2707],{"class":362},[315,3702,2699],{"class":358},[315,3704,2753],{"class":362},[315,3706,3707],{"class":317,"line":382},[315,3708,410],{"class":362},[14,3710,3711,3713],{},[31,3712,2641],{}," 會在排序過程中不斷調用：",[306,3715,3717],{"className":308,"code":3716,"language":310,"meta":311,"style":311},"rule(a, b);\n",[31,3718,3719],{"__ignoreMap":311},[315,3720,3721,3723],{"class":317,"line":318},[315,3722,3290],{"class":358},[315,3724,3725],{"class":362},"(a, b);\n",[14,3727,3728],{},"這個函數要回答：",[909,3730,3731],{},[14,3732,3733],{},[851,3734,3735,3736,3738,3739,3585],{},"按照當前排序規則，",[31,3737,3580],{}," 是否應該排在 ",[31,3740,3584],{},[14,3742,3743],{},"例如：",[306,3745,3747],{"className":308,"code":3746,"language":310,"meta":311,"style":311},"rule(\"Bob\", \"Charlie\");\n",[31,3748,3749],{"__ignoreMap":311},[315,3750,3751,3753,3755,3757,3759,3761],{"class":317,"line":318},[315,3752,3290],{"class":358},[315,3754,363],{"class":362},[315,3756,2611],{"class":325},[315,3758,559],{"class":362},[315,3760,2621],{"class":325},[315,3762,3763],{"class":362},");\n",[14,3765,3766],{},"因爲：",[306,3768,3771],{"className":3769,"code":3770,"language":860,"meta":311},[858],"Bob      长度 3\nCharlie  长度 7\n",[31,3772,3770],{"__ignoreMap":311},[14,3774,3775],{},"最終判斷的是：",[306,3777,3779],{"className":308,"code":3778,"language":310,"meta":311,"style":311},"3 \u003C 7\n",[31,3780,3781],{"__ignoreMap":311},[315,3782,3783,3785,3788],{"class":317,"line":318},[315,3784,567],{"class":394},[315,3786,3787],{"class":321}," \u003C",[315,3789,3790],{"class":394}," 7\n",[14,3792,3793,3794,3796,3797,3800,3801,3804],{},"結果爲 ",[31,3795,916],{},"，表示按照當前規則，",[31,3798,3799],{},"Bob"," 應該排在 ",[31,3802,3803],{},"Charlie"," 前面。",[14,3806,3807],{},"如果兩個字符串長度相同：",[306,3809,3811],{"className":308,"code":3810,"language":310,"meta":311,"style":311},"if (a.size() == b.size())\n{\n    return a \u003C b;\n}\n",[31,3812,3813,3832,3836,3846],{"__ignoreMap":311},[315,3814,3815,3818,3820,3822,3824,3826,3828,3830],{"class":317,"line":318},[315,3816,3817],{"class":321},"if",[315,3819,2696],{"class":362},[315,3821,2699],{"class":358},[315,3823,2183],{"class":362},[315,3825,2704],{"class":321},[315,3827,2707],{"class":362},[315,3829,2699],{"class":358},[315,3831,2712],{"class":362},[315,3833,3834],{"class":317,"line":329},[315,3835,379],{"class":362},[315,3837,3838,3840,3842,3844],{"class":317,"line":337},[315,3839,385],{"class":321},[315,3841,1554],{"class":362},[315,3843,2594],{"class":321},[315,3845,1560],{"class":362},[315,3847,3848],{"class":317,"line":345},[315,3849,410],{"class":362},[14,3851,3852,3853,3182,3856,3859,3860,3862],{},"就再使用字符串的字典順序決定誰在前面。例如 ",[31,3854,3855],{},"Alice",[31,3857,3858],{},"David"," 長度都是 ",[31,3861,577],{},"，因此比較：",[306,3864,3866],{"className":308,"code":3865,"language":310,"meta":311,"style":311},"\"Alice\" \u003C \"David\"\n",[31,3867,3868],{"__ignoreMap":311},[315,3869,3870,3872,3874],{"class":317,"line":318},[315,3871,2616],{"class":325},[315,3873,3787],{"class":321},[315,3875,3876],{"class":325}," \"David\"\n",[14,3878,3793,3879,3881,3882,3884,3885,3804],{},[31,3880,916],{},"，所以 ",[31,3883,3855],{}," 排在 ",[31,3886,3858],{},[14,3888,3889],{},"三個算法可以這樣記：",[48,3891,3892,3902],{},[51,3893,3894],{},[54,3895,3896,3899],{},[57,3897,3898],{"align":59},"API",[57,3900,3901],{"align":59},"第三個參數回答什麼？",[68,3903,3904,3914,3925],{},[54,3905,3906,3910],{},[73,3907,3908],{"align":59},[31,3909,608],{},[73,3911,3912],{"align":59},[851,3913,3303],{},[54,3915,3916,3920],{},[73,3917,3918],{"align":59},[31,3919,2867],{},[73,3921,3922],{"align":59},[851,3923,3924],{},"這個元素是不是我要找的？",[54,3926,3927,3931],{},[73,3928,3929],{"align":59},[31,3930,2641],{},[73,3932,3933],{"align":59},[851,3934,3935,3581,3937,3585],{},[31,3936,3580],{},[31,3938,3584],{},[14,3940,3941],{},"這正是 Lambda 很常見的用途：STL 算法負責通用流程，Lambda 負責描述具體規則。",[864,3943,3945,3182,3947],{"id":3944},"const-stdstring-和-size",[31,3946,3099],{},[31,3948,3949],{},".size()",[14,3951,3952],{},"Lambda 中的：",[306,3954,3956],{"className":308,"code":3955,"language":310,"meta":311,"style":311},"const std::string& a\n",[31,3957,3958],{"__ignoreMap":311},[315,3959,3960,3962,3964,3966,3968],{"class":317,"line":318},[315,3961,2661],{"class":321},[315,3963,602],{"class":358},[315,3965,2599],{"class":362},[315,3967,1892],{"class":321},[315,3969,3970],{"class":362}," a\n",[14,3972,3973],{},"可以拆成：",[135,3975,3976,3981,3986],{},[21,3977,3978,3980],{},[31,3979,1591],{},"：參數是字符串；",[21,3982,3983,3985],{},[31,3984,1892],{},"：使用引用，不額外複製整個字符串；",[21,3987,3988,3990],{},[31,3989,2661],{},"：只讀取這個字符串，不修改它。",[14,3992,3500,3993,3995,3996,3229,3998,4001],{},[31,3994,3099],{}," 常用於只讀地接收 ",[31,3997,2668],{},[31,3999,4000],{},"vector"," 等較大的對象。",[14,4003,4004],{},"字符串的：",[306,4006,4008],{"className":308,"code":4007,"language":310,"meta":311,"style":311},"a.size()\n",[31,4009,4010],{"__ignoreMap":311},[315,4011,4012,4015,4017],{"class":317,"line":318},[315,4013,4014],{"class":362},"a.",[315,4016,2699],{"class":358},[315,4018,514],{"class":362},[14,4020,4021],{},"返回字符串長度。例如：",[306,4023,4026],{"className":4024,"code":4025,"language":860,"meta":311},[858],"\"Bob\"       -> 3\n\"Alice\"     -> 5\n\"Charlie\"   -> 7\n\"David\"     -> 5\n",[31,4027,4025],{"__ignoreMap":311},[14,4029,4030],{},"所以示例的排序結果是：",[306,4032,4035],{"className":4033,"code":4034,"language":860,"meta":311},[858],"Bob Alice David Charlie\n",[31,4036,4034],{"__ignoreMap":311},[864,4038,3112,4040],{"id":4039},"範圍-for",[31,4041,1132],{},[306,4043,4045],{"className":308,"code":4044,"language":310,"meta":311,"style":311},"for (const auto& name : names)\n{\n    std::cout \u003C\u003C name \u003C\u003C \" \";\n}\n",[31,4046,4047,4059,4063,4079],{"__ignoreMap":311},[315,4048,4049,4051,4053,4055,4057],{"class":317,"line":318},[315,4050,1132],{"class":321},[315,4052,2782],{"class":362},[315,4054,2661],{"class":321},[315,4056,2787],{"class":321},[315,4058,2790],{"class":362},[315,4060,4061],{"class":317,"line":329},[315,4062,379],{"class":362},[315,4064,4065,4067,4069,4071,4073,4075,4077],{"class":317,"line":337},[315,4066,538],{"class":358},[315,4068,631],{"class":362},[315,4070,634],{"class":321},[315,4072,2806],{"class":362},[315,4074,634],{"class":321},[315,4076,2811],{"class":325},[315,4078,404],{"class":362},[315,4080,4081],{"class":317,"line":345},[315,4082,410],{"class":362},[14,4084,4085],{},"可以直接理解爲：",[909,4087,4088],{},[14,4089,4090,4091,4093,4094,146],{},"依次取出 ",[31,4092,3210],{}," 中的每個元素，並把當前元素命名爲 ",[31,4095,4096],{},"name",[14,4098,4099],{},"這裏的：",[306,4101,4103],{"className":308,"code":4102,"language":310,"meta":311,"style":311},"const auto& name\n",[31,4104,4105],{"__ignoreMap":311},[315,4106,4107,4109,4111],{"class":317,"line":318},[315,4108,2661],{"class":321},[315,4110,2787],{"class":321},[315,4112,4113],{"class":362}," name\n",[14,4115,4116,4117,4119],{},"編譯器會根據 ",[31,4118,3210],{}," 的元素類型自動推導，近似等價於：",[306,4121,4123],{"className":308,"code":4122,"language":310,"meta":311,"style":311},"const std::string& name\n",[31,4124,4125],{"__ignoreMap":311},[315,4126,4127,4129,4131,4133,4135],{"class":317,"line":318},[315,4128,2661],{"class":321},[315,4130,602],{"class":358},[315,4132,2599],{"class":362},[315,4134,1892],{"class":321},[315,4136,4113],{"class":362},[864,4138,4140],{"id":4139},"static_caststdsize_t",[31,4141,4142],{},"static_cast\u003Cstd::size_t>",[14,4144,4145],{},"這裏：",[306,4147,4149],{"className":308,"code":4148,"language":310,"meta":311,"style":311},"static_cast\u003Cstd::size_t>(min_length)\n",[31,4150,4151],{"__ignoreMap":311},[315,4152,4153,4156,4158,4160,4162],{"class":317,"line":318},[315,4154,4155],{"class":321},"static_cast\u003C",[315,4157,930],{"class":358},[315,4159,605],{"class":362},[315,4161,2926],{"class":321},[315,4163,4164],{"class":362},"(min_length)\n",[14,4166,4167],{},"是顯式類型轉換，可以簡單理解爲：",[909,4169,4170],{},[14,4171,4172,4173,4175,4176,4178],{},"把 ",[31,4174,2885],{}," 轉換成 ",[31,4177,3158],{}," 類型。",[14,4180,4181,4182,4185,4186,4188],{},"因爲 ",[31,4183,4184],{},"name.size()"," 返回的是 ",[31,4187,3158],{},"，而：",[306,4190,4192],{"className":308,"code":4191,"language":310,"meta":311,"style":311},"int min_length = 6;\n",[31,4193,4194],{"__ignoreMap":311},[315,4195,4196,4198,4200,4202,4204],{"class":317,"line":318},[315,4197,366],{"class":321},[315,4199,2844],{"class":362},[315,4201,550],{"class":321},[315,4203,2849],{"class":394},[315,4205,404],{"class":362},[14,4207,4208,4209,4211,4212,4214],{},"中的 ",[31,4210,2885],{}," 是 ",[31,4213,366],{},"。轉換以後，兩邊使用適合的同類整數類型進行比較。",[14,4216,4217,4219],{},[31,4218,3158],{}," 常用於表示容器大小、字符串長度和數組下標等非負數量。",[864,4221,4223,4225],{"id":4222},"it-和迭代器",[31,4224,3174],{}," 和迭代器",[306,4227,4229],{"className":308,"code":4228,"language":310,"meta":311,"style":311},"auto it = std::find_if(...);\n",[31,4230,4231],{"__ignoreMap":311},[315,4232,4233,4235,4237,4239,4241,4243,4245],{"class":317,"line":318},[315,4234,145],{"class":321},[315,4236,2858],{"class":362},[315,4238,550],{"class":321},[315,4240,602],{"class":358},[315,4242,605],{"class":362},[315,4244,2867],{"class":358},[315,4246,4247],{"class":362},"(...);\n",[14,4249,4250,4252,4253,146],{},[31,4251,2867],{}," 返回的不是字符串本身，而是一個",[851,4254,4255],{},"迭代器",[14,4257,4258],{},"迭代器可以暫時理解成類似指針的對象，用來表示容器中的某個位置。",[14,4260,4261],{},"排序後的數據是：",[306,4263,4266],{"className":4264,"code":4265,"language":860,"meta":311},[858],"Bob    Alice    David    Charlie\n                         ↑\n                         it\n",[31,4267,4265],{"__ignoreMap":311},[14,4269,4270],{},"因此：",[306,4272,4274],{"className":308,"code":4273,"language":310,"meta":311,"style":311},"*it\n",[31,4275,4276],{"__ignoreMap":311},[315,4277,4278,4281],{"class":317,"line":318},[315,4279,4280],{"class":321},"*",[315,4282,4283],{"class":362},"it\n",[14,4285,4286],{},"取得的就是：",[306,4288,4291],{"className":4289,"code":4290,"language":860,"meta":311},[858],"Charlie\n",[31,4292,4290],{"__ignoreMap":311},[14,4294,4295,4296,4298],{},"如果 ",[31,4297,2867],{}," 一直沒有找到滿足條件的元素，它會返回：",[306,4300,4302],{"className":308,"code":4301,"language":310,"meta":311,"style":311},"names.end()\n",[31,4303,4304],{"__ignoreMap":311},[315,4305,4306,4308,4310],{"class":317,"line":318},[315,4307,3196],{"class":362},[315,4309,620],{"class":358},[315,4311,514],{"class":362},[14,4313,4314],{},"所以常見寫法是：",[306,4316,4318],{"className":308,"code":4317,"language":310,"meta":311,"style":311},"if (it != names.end())\n{\n    std::cout \u003C\u003C *it \u003C\u003C \"\\n\";\n}\n",[31,4319,4320,4334,4338,4360],{"__ignoreMap":311},[315,4321,4322,4324,4326,4328,4330,4332],{"class":317,"line":318},[315,4323,3817],{"class":321},[315,4325,2945],{"class":362},[315,4327,2948],{"class":321},[315,4329,2951],{"class":362},[315,4331,620],{"class":358},[315,4333,2712],{"class":362},[315,4335,4336],{"class":317,"line":329},[315,4337,379],{"class":362},[315,4339,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358],{"class":317,"line":337},[315,4341,538],{"class":358},[315,4343,631],{"class":362},[315,4345,634],{"class":321},[315,4347,2975],{"class":321},[315,4349,2978],{"class":362},[315,4351,634],{"class":321},[315,4353,647],{"class":325},[315,4355,650],{"class":394},[315,4357,653],{"class":325},[315,4359,404],{"class":362},[315,4361,4362],{"class":317,"line":345},[315,4363,410],{"class":362},[14,4365,4366],{},"意思就是：",[909,4368,4369],{},[14,4370,4371],{},"如果確實找到了元素，再使用它。",[864,4373,4374],{"id":4374},"整段代碼的執行過程",[14,4376,4377],{},"程序首先創建：",[306,4379,4381],{"className":308,"code":4380,"language":310,"meta":311,"style":311},"std::vector\u003Cstd::string> names = {\n    \"Bob\",\n    \"Alice\",\n    \"Charlie\",\n    \"David\"\n};\n",[31,4382,4383,4403,4411,4418,4425,4430],{"__ignoreMap":311},[315,4384,4385,4387,4389,4391,4393,4395,4397,4399,4401],{"class":317,"line":318},[315,4386,930],{"class":358},[315,4388,541],{"class":362},[315,4390,2594],{"class":321},[315,4392,930],{"class":358},[315,4394,2599],{"class":362},[315,4396,484],{"class":321},[315,4398,2604],{"class":362},[315,4400,550],{"class":321},[315,4402,1594],{"class":362},[315,4404,4405,4408],{"class":317,"line":329},[315,4406,4407],{"class":325},"    \"Bob\"",[315,4409,4410],{"class":362},",\n",[315,4412,4413,4416],{"class":317,"line":337},[315,4414,4415],{"class":325},"    \"Alice\"",[315,4417,4410],{"class":362},[315,4419,4420,4423],{"class":317,"line":345},[315,4421,4422],{"class":325},"    \"Charlie\"",[315,4424,4410],{"class":362},[315,4426,4427],{"class":317,"line":352},[315,4428,4429],{"class":325},"    \"David\"\n",[315,4431,4432],{"class":317,"line":376},[315,4433,498],{"class":362},[14,4435,4436,4437,4439],{},"然後 ",[31,4438,3235],{}," 使用 Lambda 作爲排序規則：",[18,4441,4442,4445],{},[21,4443,4444],{},"長度不同，短的排前面。",[21,4446,4447],{},"長度相同，按照字符串字典順序排列。",[14,4449,4450],{},"所以得到：",[306,4452,4454],{"className":4453,"code":4034,"language":860,"meta":311},[858],[31,4455,4034],{"__ignoreMap":311},[14,4457,4458],{},"接下來：",[306,4460,4461],{"className":308,"code":4191,"language":310,"meta":311,"style":311},[31,4462,4463],{"__ignoreMap":311},[315,4464,4465,4467,4469,4471,4473],{"class":317,"line":318},[315,4466,366],{"class":321},[315,4468,2844],{"class":362},[315,4470,550],{"class":321},[315,4472,2849],{"class":394},[315,4474,404],{"class":362},[14,4476,4477,4478,4480],{},"規定要尋找長度至少爲 ",[31,4479,582],{}," 的名字。",[14,4482,4483,4485],{},[31,4484,3232],{}," 會按照當前順序依次調用 Lambda：",[306,4487,4490],{"className":4488,"code":4489,"language":860,"meta":311},[858],"Bob       -> 3 >= 6 -> false\nAlice     -> 5 >= 6 -> false\nDavid     -> 5 >= 6 -> false\nCharlie   -> 7 >= 6 -> true\n",[31,4491,4489],{"__ignoreMap":311},[14,4493,4494,4495,4497,4498,4500,4501,854],{},"第一次得到 ",[31,4496,916],{}," 時停止，因此 ",[31,4499,3174],{}," 最終指向 ",[31,4502,3803],{},[306,4504,4505],{"className":308,"code":4273,"language":310,"meta":311,"style":311},[31,4506,4507],{"__ignoreMap":311},[315,4508,4509,4511],{"class":317,"line":318},[315,4510,4280],{"class":321},[315,4512,4283],{"class":362},[14,4514,4515],{},"得到：",[306,4517,4519],{"className":4518,"code":4290,"language":860,"meta":311},[858],[31,4520,4290],{"__ignoreMap":311},[14,4522,4523],{},"最終輸出：",[306,4525,4527],{"className":4526,"code":3016,"language":860,"meta":311},[858],[31,4528,3016],{"__ignoreMap":311},[14,4530,4531],{},"這個示例體現了 Lambda 非常典型的一種用途：",[909,4533,4534],{},[14,4535,4536],{},[851,4537,4538],{},"STL 算法負責通用流程，Lambda 負責描述具體規則。",[298,4540,4542],{"id":4541},"示例-6保存回調時要注意捕獲生命週期","示例 6：保存回調時要注意捕獲生命週期",[14,4544,4545],{},"如果 lambda 只是立刻調用，引用捕獲通常看起來沒問題；如果保存到容器、線程、定時器或異步回調裏，lambda 可能晚於局部變量執行。保存回調時優先按值捕獲需要的數據。",[306,4547,4549],{"className":308,"code":4548,"language":310,"meta":311,"style":311},"#include \u003Cfunctional>\n#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cvector>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    \u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\n    \u002F\u002F vector 是动态数组，元素数量可以在运行时变化。\n    std::vector\u003Cstd::function\u003Cvoid()>> callbacks;\n\n    {\n        std::string name = \"Alice\";\n        int score = 95;\n\n        auto print_now = [&name, &score]() {\n            std::cout \u003C\u003C \"now: \" \u003C\u003C name \u003C\u003C \" \" \u003C\u003C score \u003C\u003C \"\\n\";\n        };\n        print_now();\n\n        callbacks.push_back([name, score]() {\n            std::cout \u003C\u003C \"saved: \" \u003C\u003C name \u003C\u003C \" \" \u003C\u003C score \u003C\u003C \"\\n\";\n        });\n    }\n\n    for (const auto& callback : callbacks)\n    {\n        callback();\n    }\n\n    return 0;\n}\n",[31,4550,4551,4558,4564,4570,4576,4580,4588,4592,4596,4601,4605,4629,4633,4637,4651,4665,4669,4694,4728,4733,4740,4744,4763,4796,4801,4805,4809,4822,4826,4833,4837,4841,4849],{"__ignoreMap":311},[315,4552,4553,4555],{"class":317,"line":318},[315,4554,322],{"class":321},[315,4556,4557],{"class":325}," \u003Cfunctional>\n",[315,4559,4560,4562],{"class":317,"line":329},[315,4561,322],{"class":321},[315,4563,334],{"class":325},[315,4565,4566,4568],{"class":317,"line":337},[315,4567,322],{"class":321},[315,4569,1500],{"class":325},[315,4571,4572,4574],{"class":317,"line":345},[315,4573,322],{"class":321},[315,4575,342],{"class":325},[315,4577,4578],{"class":317,"line":352},[315,4579,349],{"emptyLinePlaceholder":348},[315,4581,4582,4584,4586],{"class":317,"line":376},[315,4583,366],{"class":321},[315,4585,511],{"class":358},[315,4587,514],{"class":362},[315,4589,4590],{"class":317,"line":382},[315,4591,379],{"class":362},[315,4593,4594],{"class":317,"line":407},[315,4595,526],{"class":525},[315,4597,4598],{"class":317,"line":413},[315,4599,4600],{"class":525},"    \u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\n",[315,4602,4603],{"class":317,"line":418},[315,4604,532],{"class":525},[315,4606,4607,4609,4611,4613,4615,4618,4621,4623,4626],{"class":317,"line":427},[315,4608,538],{"class":358},[315,4610,541],{"class":362},[315,4612,2594],{"class":321},[315,4614,930],{"class":358},[315,4616,4617],{"class":362},"::function",[315,4619,4620],{"class":321},"\u003Cvoid",[315,4622,455],{"class":362},[315,4624,4625],{"class":321},">>",[315,4627,4628],{"class":362}," callbacks;\n",[315,4630,4631],{"class":317,"line":432},[315,4632,349],{"emptyLinePlaceholder":348},[315,4634,4635],{"class":317,"line":441},[315,4636,473],{"class":362},[315,4638,4639,4641,4644,4646,4649],{"class":317,"line":446},[315,4640,2799],{"class":358},[315,4642,4643],{"class":362},"::string name ",[315,4645,550],{"class":321},[315,4647,4648],{"class":325}," \"Alice\"",[315,4650,404],{"class":362},[315,4652,4653,4656,4658,4660,4663],{"class":317,"line":470},[315,4654,4655],{"class":321},"        int",[315,4657,1824],{"class":362},[315,4659,550],{"class":321},[315,4661,4662],{"class":394}," 95",[315,4664,404],{"class":362},[315,4666,4667],{"class":317,"line":476},[315,4668,349],{"emptyLinePlaceholder":348},[315,4670,4671,4674,4677,4679,4681,4683,4685,4687,4689,4691],{"class":317,"line":489},[315,4672,4673],{"class":321},"        auto",[315,4675,4676],{"class":362}," print_now ",[315,4678,550],{"class":321},[315,4680,1847],{"class":362},[315,4682,1892],{"class":321},[315,4684,4096],{"class":369},[315,4686,559],{"class":362},[315,4688,1892],{"class":321},[315,4690,1850],{"class":369},[315,4692,4693],{"class":362},"]() {\n",[315,4695,4696,4699,4701,4703,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726],{"class":317,"line":495},[315,4697,4698],{"class":358},"            std",[315,4700,631],{"class":362},[315,4702,634],{"class":321},[315,4704,4705],{"class":325}," \"now: \"",[315,4707,640],{"class":321},[315,4709,2806],{"class":362},[315,4711,634],{"class":321},[315,4713,2811],{"class":325},[315,4715,640],{"class":321},[315,4717,1824],{"class":362},[315,4719,634],{"class":321},[315,4721,647],{"class":325},[315,4723,650],{"class":394},[315,4725,653],{"class":325},[315,4727,404],{"class":362},[315,4729,4730],{"class":317,"line":501},[315,4731,4732],{"class":362},"        };\n",[315,4734,4735,4738],{"class":317,"line":506},[315,4736,4737],{"class":358},"        print_now",[315,4739,2753],{"class":362},[315,4741,4742],{"class":317,"line":517},[315,4743,349],{"emptyLinePlaceholder":348},[315,4745,4746,4749,4752,4755,4757,4759,4761],{"class":317,"line":522},[315,4747,4748],{"class":362},"        callbacks.",[315,4750,4751],{"class":358},"push_back",[315,4753,4754],{"class":362},"([",[315,4756,4096],{"class":369},[315,4758,559],{"class":362},[315,4760,1850],{"class":369},[315,4762,4693],{"class":362},[315,4764,4765,4767,4769,4771,4774,4776,4778,4780,4782,4784,4786,4788,4790,4792,4794],{"class":317,"line":529},[315,4766,4698],{"class":358},[315,4768,631],{"class":362},[315,4770,634],{"class":321},[315,4772,4773],{"class":325}," \"saved: \"",[315,4775,640],{"class":321},[315,4777,2806],{"class":362},[315,4779,634],{"class":321},[315,4781,2811],{"class":325},[315,4783,640],{"class":321},[315,4785,1824],{"class":362},[315,4787,634],{"class":321},[315,4789,647],{"class":325},[315,4791,650],{"class":394},[315,4793,653],{"class":325},[315,4795,404],{"class":362},[315,4797,4798],{"class":317,"line":535},[315,4799,4800],{"class":362},"        });\n",[315,4802,4803],{"class":317,"line":587},[315,4804,492],{"class":362},[315,4806,4807],{"class":317,"line":592},[315,4808,349],{"emptyLinePlaceholder":348},[315,4810,4811,4813,4815,4817,4819],{"class":317,"line":626},[315,4812,2779],{"class":321},[315,4814,2782],{"class":362},[315,4816,2661],{"class":321},[315,4818,2787],{"class":321},[315,4820,4821],{"class":362}," callback : callbacks)\n",[315,4823,4824],{"class":317,"line":658},[315,4825,473],{"class":362},[315,4827,4828,4831],{"class":317,"line":663},[315,4829,4830],{"class":358},"        callback",[315,4832,2753],{"class":362},[315,4834,4835],{"class":317,"line":695},[315,4836,492],{"class":362},[315,4838,4839],{"class":317,"line":721},[315,4840,349],{"emptyLinePlaceholder":348},[315,4842,4843,4845,4847],{"class":317,"line":726},[315,4844,385],{"class":321},[315,4846,401],{"class":394},[315,4848,404],{"class":362},[315,4850,4851],{"class":317,"line":741},[315,4852,410],{"class":362},[14,4854,4855,854],{},[851,4856,853],{},[306,4858,4861],{"className":4859,"code":4860,"language":860,"meta":311},[858],"now: Alice 95\nsaved: Alice 95\n",[31,4862,4860],{"__ignoreMap":311},[14,4864,4865,4866,4869,4870,4873,4874,3182,4876,4878],{},"這裏 ",[31,4867,4868],{},"print_now"," 立刻調用，所以引用捕獲沒問題。保存到 ",[31,4871,4872],{},"callbacks"," 的 lambda 用按值捕獲，因爲離開內部作用域後，",[31,4875,4096],{},[31,4877,1850],{}," 已經銷燬。",[298,4880,4882,4883,4885],{"id":4881},"示例-7捕獲-this-訪問當前對象","示例 7：捕獲 ",[31,4884,293],{}," 訪問當前對象",[14,4887,4888,4889,4891],{},"在類的成員函數中，Lambda 可以使用 ",[31,4890,272],{}," 捕獲當前對象的指針。Lambda 訪問的仍然是原來的對象，因此對象成員之後發生的變化也能看到。",[306,4893,4895],{"className":308,"code":4894,"language":310,"meta":311,"style":311},"#include \u003Ciostream>\n\nclass Robot\n{\npublic:\n    Robot(int speed) : speed_(speed)\n    {\n    }\n\n    void demo()\n    {\n        auto print_speed = [this]() {\n            std::cout \u003C\u003C \"lambda speed = \" \u003C\u003C speed_ \u003C\u003C \"\\n\";\n        };\n\n        speed_ = 20;\n        print_speed();\n    }\n\nprivate:\n    int speed_;\n};\n\nint main()\n{\n    Robot robot(10);\n    robot.demo();\n\n    return 0;\n}\n",[31,4896,4897,4903,4907,4915,4919,4924,4945,4949,4953,4957,4967,4971,4986,5012,5016,5020,5031,5038,5042,5046,5051,5058,5062,5066,5074,5078,5093,5103,5107,5115],{"__ignoreMap":311},[315,4898,4899,4901],{"class":317,"line":318},[315,4900,322],{"class":321},[315,4902,334],{"class":325},[315,4904,4905],{"class":317,"line":329},[315,4906,349],{"emptyLinePlaceholder":348},[315,4908,4909,4912],{"class":317,"line":337},[315,4910,4911],{"class":321},"class",[315,4913,4914],{"class":358}," Robot\n",[315,4916,4917],{"class":317,"line":345},[315,4918,379],{"class":362},[315,4920,4921],{"class":317,"line":352},[315,4922,4923],{"class":321},"public:\n",[315,4925,4926,4929,4931,4933,4936,4939,4942],{"class":317,"line":376},[315,4927,4928],{"class":358},"    Robot",[315,4930,363],{"class":362},[315,4932,366],{"class":321},[315,4934,4935],{"class":369}," speed",[315,4937,4938],{"class":362},") : ",[315,4940,4941],{"class":358},"speed_",[315,4943,4944],{"class":362},"(speed)\n",[315,4946,4947],{"class":317,"line":382},[315,4948,473],{"class":362},[315,4950,4951],{"class":317,"line":407},[315,4952,492],{"class":362},[315,4954,4955],{"class":317,"line":413},[315,4956,349],{"emptyLinePlaceholder":348},[315,4958,4959,4962,4965],{"class":317,"line":418},[315,4960,4961],{"class":321},"    void",[315,4963,4964],{"class":358}," demo",[315,4966,514],{"class":362},[315,4968,4969],{"class":317,"line":427},[315,4970,473],{"class":362},[315,4972,4973,4975,4978,4980,4982,4984],{"class":317,"line":432},[315,4974,4673],{"class":321},[315,4976,4977],{"class":362}," print_speed ",[315,4979,550],{"class":321},[315,4981,1847],{"class":362},[315,4983,293],{"class":394},[315,4985,4693],{"class":362},[315,4987,4988,4990,4992,4994,4997,4999,5002,5004,5006,5008,5010],{"class":317,"line":441},[315,4989,4698],{"class":358},[315,4991,631],{"class":362},[315,4993,634],{"class":321},[315,4995,4996],{"class":325}," \"lambda speed = \"",[315,4998,640],{"class":321},[315,5000,5001],{"class":362}," speed_ ",[315,5003,634],{"class":321},[315,5005,647],{"class":325},[315,5007,650],{"class":394},[315,5009,653],{"class":325},[315,5011,404],{"class":362},[315,5013,5014],{"class":317,"line":446},[315,5015,4732],{"class":362},[315,5017,5018],{"class":317,"line":470},[315,5019,349],{"emptyLinePlaceholder":348},[315,5021,5022,5025,5027,5029],{"class":317,"line":476},[315,5023,5024],{"class":362},"        speed_ ",[315,5026,550],{"class":321},[315,5028,1937],{"class":394},[315,5030,404],{"class":362},[315,5032,5033,5036],{"class":317,"line":489},[315,5034,5035],{"class":358},"        print_speed",[315,5037,2753],{"class":362},[315,5039,5040],{"class":317,"line":495},[315,5041,492],{"class":362},[315,5043,5044],{"class":317,"line":501},[315,5045,349],{"emptyLinePlaceholder":348},[315,5047,5048],{"class":317,"line":506},[315,5049,5050],{"class":321},"private:\n",[315,5052,5053,5055],{"class":317,"line":517},[315,5054,435],{"class":321},[315,5056,5057],{"class":362}," speed_;\n",[315,5059,5060],{"class":317,"line":522},[315,5061,498],{"class":362},[315,5063,5064],{"class":317,"line":529},[315,5065,349],{"emptyLinePlaceholder":348},[315,5067,5068,5070,5072],{"class":317,"line":535},[315,5069,366],{"class":321},[315,5071,511],{"class":358},[315,5073,514],{"class":362},[315,5075,5076],{"class":317,"line":587},[315,5077,379],{"class":362},[315,5079,5080,5083,5086,5088,5091],{"class":317,"line":592},[315,5081,5082],{"class":362},"    Robot ",[315,5084,5085],{"class":358},"robot",[315,5087,363],{"class":362},[315,5089,5090],{"class":394},"10",[315,5092,3763],{"class":362},[315,5094,5095,5098,5101],{"class":317,"line":626},[315,5096,5097],{"class":362},"    robot.",[315,5099,5100],{"class":358},"demo",[315,5102,2753],{"class":362},[315,5104,5105],{"class":317,"line":658},[315,5106,349],{"emptyLinePlaceholder":348},[315,5108,5109,5111,5113],{"class":317,"line":663},[315,5110,385],{"class":321},[315,5112,401],{"class":394},[315,5114,404],{"class":362},[315,5116,5117],{"class":317,"line":695},[315,5118,410],{"class":362},[14,5120,5121,854],{},[851,5122,853],{},[306,5124,5127],{"className":5125,"code":5126,"language":860,"meta":311},[858],"lambda speed = 20\n",[31,5128,5126],{"__ignoreMap":311},[14,5130,4145],{},[306,5132,5134],{"className":308,"code":5133,"language":310,"meta":311,"style":311},"[this]() {\n    std::cout \u003C\u003C speed_;\n}\n",[31,5135,5136,5144,5154],{"__ignoreMap":311},[315,5137,5138,5140,5142],{"class":317,"line":318},[315,5139,1454],{"class":362},[315,5141,293],{"class":394},[315,5143,4693],{"class":362},[315,5145,5146,5148,5150,5152],{"class":317,"line":329},[315,5147,538],{"class":358},[315,5149,631],{"class":362},[315,5151,634],{"class":321},[315,5153,5057],{"class":362},[315,5155,5156],{"class":317,"line":337},[315,5157,410],{"class":362},[14,5159,5160,5161,5163],{},"可以近似理解爲 Lambda 保存了當前對象的 ",[31,5162,293],{}," 指針，因此：",[306,5165,5167],{"className":308,"code":5166,"language":310,"meta":311,"style":311},"speed_\n",[31,5168,5169],{"__ignoreMap":311},[315,5170,5171],{"class":317,"line":318},[315,5172,5166],{"class":362},[14,5174,5175],{},"實際上訪問的是：",[306,5177,5179],{"className":308,"code":5178,"language":310,"meta":311,"style":311},"this->speed_\n",[31,5180,5181],{"__ignoreMap":311},[315,5182,5183,5185],{"class":317,"line":318},[315,5184,293],{"class":394},[315,5186,5187],{"class":362},"->speed_\n",[14,5189,5190,5191,4211,5193,5195,5196,5198,5199,5202,5203,5205,5206,146],{},"創建 Lambda 時 ",[31,5192,4941],{},[31,5194,5090],{},"，之後原對象把 ",[31,5197,4941],{}," 修改成 ",[31,5200,5201],{},"20","。因爲 ",[31,5204,272],{}," 指向的仍然是原對象，所以調用 Lambda 時讀到的是 ",[31,5207,5201],{},[14,5209,5210,5211,5213,5214,5217,5218,5220],{},"需要特別注意：",[31,5212,272],{}," 保存的是",[851,5215,5216],{},"對象指針，不是對象副本","。如果 Lambda 被保存下來，而原對象已經銷燬，再通過這個 Lambda 訪問成員就可能產生懸空指針問題。因此保存回調、異步任務和線程回調中使用 ",[31,5219,272],{}," 時要特別關注對象生命週期。",[298,5222,5224,5225,5227],{"id":5223},"示例-8使用-this-捕獲當前對象副本","示例 8：使用 ",[31,5226,156],{}," 捕獲當前對象副本",[14,5229,5230,5231,5233],{},"C++17 開始可以使用 ",[31,5232,156],{},"。它不是保存當前對象的指針，而是在創建 Lambda 時複製一份當前對象。",[306,5235,5237],{"className":308,"code":5236,"language":310,"meta":311,"style":311},"#include \u003Ciostream>\n\nclass Robot\n{\npublic:\n    Robot(int speed) : speed_(speed)\n    {\n    }\n\n    void demo()\n    {\n        auto print_speed = [*this]() {\n            std::cout \u003C\u003C \"lambda copy speed = \" \u003C\u003C speed_ \u003C\u003C \"\\n\";\n        };\n\n        speed_ = 20;\n\n        print_speed();\n        std::cout \u003C\u003C \"outside speed = \" \u003C\u003C speed_ \u003C\u003C \"\\n\";\n    }\n\nprivate:\n    int speed_;\n};\n\nint main()\n{\n    Robot robot(10);\n    robot.demo();\n\n    return 0;\n}\n",[31,5238,5239,5245,5249,5255,5259,5263,5279,5283,5287,5291,5299,5303,5319,5344,5348,5352,5362,5366,5372,5397,5401,5405,5409,5415,5419,5423,5431,5435,5447,5455,5459,5467],{"__ignoreMap":311},[315,5240,5241,5243],{"class":317,"line":318},[315,5242,322],{"class":321},[315,5244,334],{"class":325},[315,5246,5247],{"class":317,"line":329},[315,5248,349],{"emptyLinePlaceholder":348},[315,5250,5251,5253],{"class":317,"line":337},[315,5252,4911],{"class":321},[315,5254,4914],{"class":358},[315,5256,5257],{"class":317,"line":345},[315,5258,379],{"class":362},[315,5260,5261],{"class":317,"line":352},[315,5262,4923],{"class":321},[315,5264,5265,5267,5269,5271,5273,5275,5277],{"class":317,"line":376},[315,5266,4928],{"class":358},[315,5268,363],{"class":362},[315,5270,366],{"class":321},[315,5272,4935],{"class":369},[315,5274,4938],{"class":362},[315,5276,4941],{"class":358},[315,5278,4944],{"class":362},[315,5280,5281],{"class":317,"line":382},[315,5282,473],{"class":362},[315,5284,5285],{"class":317,"line":407},[315,5286,492],{"class":362},[315,5288,5289],{"class":317,"line":413},[315,5290,349],{"emptyLinePlaceholder":348},[315,5292,5293,5295,5297],{"class":317,"line":418},[315,5294,4961],{"class":321},[315,5296,4964],{"class":358},[315,5298,514],{"class":362},[315,5300,5301],{"class":317,"line":427},[315,5302,473],{"class":362},[315,5304,5305,5307,5309,5311,5313,5315,5317],{"class":317,"line":432},[315,5306,4673],{"class":321},[315,5308,4977],{"class":362},[315,5310,550],{"class":321},[315,5312,1847],{"class":362},[315,5314,4280],{"class":321},[315,5316,293],{"class":394},[315,5318,4693],{"class":362},[315,5320,5321,5323,5325,5327,5330,5332,5334,5336,5338,5340,5342],{"class":317,"line":441},[315,5322,4698],{"class":358},[315,5324,631],{"class":362},[315,5326,634],{"class":321},[315,5328,5329],{"class":325}," \"lambda copy speed = \"",[315,5331,640],{"class":321},[315,5333,5001],{"class":362},[315,5335,634],{"class":321},[315,5337,647],{"class":325},[315,5339,650],{"class":394},[315,5341,653],{"class":325},[315,5343,404],{"class":362},[315,5345,5346],{"class":317,"line":446},[315,5347,4732],{"class":362},[315,5349,5350],{"class":317,"line":470},[315,5351,349],{"emptyLinePlaceholder":348},[315,5353,5354,5356,5358,5360],{"class":317,"line":476},[315,5355,5024],{"class":362},[315,5357,550],{"class":321},[315,5359,1937],{"class":394},[315,5361,404],{"class":362},[315,5363,5364],{"class":317,"line":489},[315,5365,349],{"emptyLinePlaceholder":348},[315,5367,5368,5370],{"class":317,"line":495},[315,5369,5035],{"class":358},[315,5371,2753],{"class":362},[315,5373,5374,5376,5378,5380,5383,5385,5387,5389,5391,5393,5395],{"class":317,"line":501},[315,5375,2799],{"class":358},[315,5377,631],{"class":362},[315,5379,634],{"class":321},[315,5381,5382],{"class":325}," \"outside speed = \"",[315,5384,640],{"class":321},[315,5386,5001],{"class":362},[315,5388,634],{"class":321},[315,5390,647],{"class":325},[315,5392,650],{"class":394},[315,5394,653],{"class":325},[315,5396,404],{"class":362},[315,5398,5399],{"class":317,"line":506},[315,5400,492],{"class":362},[315,5402,5403],{"class":317,"line":517},[315,5404,349],{"emptyLinePlaceholder":348},[315,5406,5407],{"class":317,"line":522},[315,5408,5050],{"class":321},[315,5410,5411,5413],{"class":317,"line":529},[315,5412,435],{"class":321},[315,5414,5057],{"class":362},[315,5416,5417],{"class":317,"line":535},[315,5418,498],{"class":362},[315,5420,5421],{"class":317,"line":587},[315,5422,349],{"emptyLinePlaceholder":348},[315,5424,5425,5427,5429],{"class":317,"line":592},[315,5426,366],{"class":321},[315,5428,511],{"class":358},[315,5430,514],{"class":362},[315,5432,5433],{"class":317,"line":626},[315,5434,379],{"class":362},[315,5436,5437,5439,5441,5443,5445],{"class":317,"line":658},[315,5438,5082],{"class":362},[315,5440,5085],{"class":358},[315,5442,363],{"class":362},[315,5444,5090],{"class":394},[315,5446,3763],{"class":362},[315,5448,5449,5451,5453],{"class":317,"line":663},[315,5450,5097],{"class":362},[315,5452,5100],{"class":358},[315,5454,2753],{"class":362},[315,5456,5457],{"class":317,"line":695},[315,5458,349],{"emptyLinePlaceholder":348},[315,5460,5461,5463,5465],{"class":317,"line":721},[315,5462,385],{"class":321},[315,5464,401],{"class":394},[315,5466,404],{"class":362},[315,5468,5469],{"class":317,"line":726},[315,5470,410],{"class":362},[14,5472,5473,854],{},[851,5474,853],{},[306,5476,5479],{"className":5477,"code":5478,"language":860,"meta":311},[858],"lambda copy speed = 10\noutside speed = 20\n",[31,5480,5478],{"__ignoreMap":311},[14,5482,5483],{},"這裏 Lambda 創建時：",[306,5485,5487],{"className":308,"code":5486,"language":310,"meta":311,"style":311},"[*this]\n",[31,5488,5489],{"__ignoreMap":311},[315,5490,5491,5493,5495,5497],{"class":317,"line":318},[315,5492,1454],{"class":362},[315,5494,4280],{"class":321},[315,5496,293],{"class":394},[315,5498,5499],{"class":362},"]\n",[14,5501,5502,5503,5506],{},"會把當時的 ",[31,5504,5505],{},"Robot"," 對象複製一份保存到 Lambda 內部。此時副本中的：",[306,5508,5511],{"className":5509,"code":5510,"language":860,"meta":311},[858],"speed_ = 10\n",[31,5512,5510],{"__ignoreMap":311},[14,5514,5515],{},"之後：",[306,5517,5519],{"className":308,"code":5518,"language":310,"meta":311,"style":311},"speed_ = 20;\n",[31,5520,5521],{"__ignoreMap":311},[315,5522,5523,5526,5528,5530],{"class":317,"line":318},[315,5524,5525],{"class":362},"speed_ ",[315,5527,550],{"class":321},[315,5529,1937],{"class":394},[315,5531,404],{"class":362},[14,5533,5534,5535,146],{},"修改的是外面的原對象，不會修改 Lambda 已經保存的對象副本，因此 Lambda 仍然輸出 ",[31,5536,5090],{},[14,5538,5539],{},"可以把兩種寫法這樣對比：",[48,5541,5542,5554],{},[51,5543,5544],{},[54,5545,5546,5548,5551],{},[57,5547,176],{"align":59},[57,5549,5550],{"align":59},"Lambda 保存什麼",[57,5552,5553],{"align":59},"原對象後來修改成員後",[68,5555,5556,5568],{},[54,5557,5558,5562,5565],{},[73,5559,5560],{"align":59},[31,5561,272],{},[73,5563,5564],{"align":59},"當前對象的指針",[73,5566,5567],{"align":59},"Lambda 能看到新的成員值",[54,5569,5570,5574,5577],{},[73,5571,5572],{"align":59},[31,5573,156],{},[73,5575,5576],{"align":59},"當前對象的副本",[73,5578,5579],{"align":59},"Lambda 保留捕獲時的成員值",[14,5581,5582,5584,5585,5587],{},[31,5583,156],{}," 可以避免因爲原對象銷燬而直接留下一個懸空的 ",[31,5586,293],{}," 指針，但它會複製整個對象，因此也要考慮對象是否適合複製以及複製成本。",[14,5589,5590,5591,854],{},"如果需要在 Lambda 中修改這份對象副本，與普通按值捕獲類似，可以再配合 ",[31,5592,2072],{},[306,5594,5596],{"className":308,"code":5595,"language":310,"meta":311,"style":311},"auto callback = [*this]() mutable {\n    ++speed_;\n};\n",[31,5597,5598,5619,5626],{"__ignoreMap":311},[315,5599,5600,5602,5605,5607,5609,5611,5613,5615,5617],{"class":317,"line":318},[315,5601,145],{"class":321},[315,5603,5604],{"class":362}," callback ",[315,5606,550],{"class":321},[315,5608,1847],{"class":362},[315,5610,4280],{"class":321},[315,5612,293],{"class":394},[315,5614,2138],{"class":362},[315,5616,2072],{"class":321},[315,5618,1594],{"class":362},[315,5620,5621,5623],{"class":317,"line":329},[315,5622,2338],{"class":321},[315,5624,5625],{"class":362},"speed_;\n",[315,5627,5628],{"class":317,"line":337},[315,5629,498],{"class":362},[14,5631,5632],{},"這裏修改的仍然只是 Lambda 內部保存的對象副本，不會修改外面的原對象。",[10,5634,5635],{"id":5635},"關鍵語法解釋",[48,5637,5638,5651],{},[51,5639,5640],{},[54,5641,5642,5645,5648],{},[57,5643,5644],{"align":59},"示例",[57,5646,5647],{"align":59},"重點",[57,5649,5650],{"align":59},"說明",[68,5652,5653,5664,5675,5690,5702,5719,5730,5742],{},[54,5654,5655,5658,5661],{},[73,5656,5657],{"align":59},"示例 1",[73,5659,5660],{"align":59},"舊回調寫法對比",[73,5662,5663],{"align":59},"普通函數、函數對象都能做回調，但 lambda 更適合局部短邏輯",[54,5665,5666,5669,5672],{},[73,5667,5668],{"align":59},"示例 2",[73,5670,5671],{"align":59},"參數和返回值",[73,5673,5674],{"align":59},"返回類型通常可推導，分支返回不同類型時要顯式寫清楚",[54,5676,5677,5680,5682],{},[73,5678,5679],{"align":59},"示例 3",[73,5681,75],{"align":59},[73,5683,5684,5686,5687,5689],{"align":59},[31,5685,203],{}," 拷貝，",[31,5688,219],{}," 引用",[54,5691,5692,5695,5699],{},[73,5693,5694],{"align":59},"示例 4",[73,5696,5697],{"align":59},[31,5698,2072],{},[73,5700,5701],{"align":59},"修改的是 lambda 內部副本，不影響外部變量",[54,5703,5704,5707,5710],{},[73,5705,5706],{"align":59},"示例 5",[73,5708,5709],{"align":59},"STL 算法",[73,5711,5712,3229,5714,3229,5716,5718],{"align":59},[31,5713,2641],{},[31,5715,2867],{},[31,5717,608],{}," 常和 lambda 配合",[54,5720,5721,5724,5727],{},[73,5722,5723],{"align":59},"示例 6",[73,5725,5726],{"align":59},"生命週期",[73,5728,5729],{"align":59},"保存回調、異步回調、線程回調中不要隨便引用捕獲局部變量",[54,5731,5732,5735,5739],{},[73,5733,5734],{"align":59},"示例 7",[73,5736,5737],{"align":59},[31,5738,272],{},[73,5740,5741],{"align":59},"捕獲當前對象指針，Lambda 訪問的是原對象",[54,5743,5744,5747,5751],{},[73,5745,5746],{"align":59},"示例 8",[73,5748,5749],{"align":59},[31,5750,156],{},[73,5752,5753],{"align":59},"C++17 起捕獲當前對象副本，與原對象狀態分離",[10,5755,5756],{"id":5756},"常見錯誤",[18,5758,5759,5765,5768,5773,5782],{},[21,5760,5761,5762,5764],{},"保存回調時使用默認引用捕獲 ",[31,5763,259],{},"，導致局部變量銷燬後仍被訪問。",[21,5766,5767],{},"以爲按值捕獲會跟着外部變量變化。按值捕獲保存的是定義 lambda 時的副本。",[21,5769,5770,5771,146],{},"想修改按值捕獲的副本，卻忘記加 ",[31,5772,2072],{},[21,5774,5775,5776,5778,5779,5781],{},"把有捕獲的 lambda 當成函數指針使用。有捕獲的 lambda 需要用模板參數、",[31,5777,145],{}," 變量或 ",[31,5780,163],{}," 保存。",[21,5783,5784,5785,5787,5788,5790],{},"異步場景捕獲 ",[31,5786,293],{}," 後，對象先被銷燬。需要保證對象生命週期，或使用智能指針、",[31,5789,156],{}," 等更明確的方式。",[10,5792,5793],{"id":5793},"使用建議",[18,5795,5796,5799,5809,5812,5815,5823],{},[21,5797,5798],{},"小而局部的邏輯優先用 lambda。",[21,5800,5801,5802,5804,5805,3182,5807,146],{},"捕獲列表儘量顯式寫 ",[31,5803,80],{},"，少用默認 ",[31,5806,246],{},[31,5808,259],{},[21,5810,5811],{},"保存回調、線程、定時器、異步操作中優先按值捕獲需要的數據。",[21,5813,5814],{},"只調用一次、不需要保存的回調，可以直接把 lambda 傳給算法或函數模板。",[21,5816,5817,5818,5820,5821,146],{},"類成員函數中的回調使用 ",[31,5819,272],{}," 時要保證對象生命週期；需要獨立保存對象狀態時可以考慮 C++17 的 ",[31,5822,156],{},[21,5824,5825,5826,146],{},"需要統一保存不同 lambda 時，再使用下一節的 ",[31,5827,163],{},[10,5829,5830],{"id":5830},"小結",[135,5832,5833,5839,5842,5850,5855,5863,5866],{},[21,5834,5835,5836,146],{},"Lambda 是匿名可調用對象，寫法是 ",[31,5837,5838],{},"[捕获](参数) { 函数体 }",[21,5840,5841],{},"捕獲列表決定 lambda 如何使用外部變量。",[21,5843,5844,5846,5847,5849],{},[31,5845,203],{}," 是按值捕獲，",[31,5848,219],{}," 是按引用捕獲。",[21,5851,5852,5854],{},[31,5853,2072],{}," 允許修改按值捕獲的內部副本。",[21,5856,5857,5859,5860,5862],{},[31,5858,272],{}," 捕獲當前對象指針，",[31,5861,156],{}," 從 C++17 起可以捕獲當前對象副本。",[21,5864,5865],{},"Lambda 最常用於 STL 算法、回調和異步任務。",[21,5867,5868],{},"生命週期是 Lambda 最容易出錯的地方，尤其是保存回調和異步回調。",[5870,5871,5872],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":311,"searchDepth":329,"depth":329,"links":5874},[5875,5876,5877,5878,5879,5891,5892,5893,5894],{"id":12,"depth":329,"text":12},{"id":40,"depth":329,"text":40},{"id":132,"depth":329,"text":133},{"id":167,"depth":329,"text":167},{"id":296,"depth":329,"text":296,"children":5880},[5881,5882,5883,5884,5885,5886,5887,5889],{"id":300,"depth":337,"text":301},{"id":1481,"depth":337,"text":1482},{"id":1782,"depth":337,"text":1783},{"id":2065,"depth":337,"text":2066},{"id":2528,"depth":337,"text":2529},{"id":4541,"depth":337,"text":4542},{"id":4881,"depth":337,"text":5888},"示例 7：捕獲 this 訪問當前對象",{"id":5223,"depth":337,"text":5890},"示例 8：使用 [*this] 捕獲當前對象副本",{"id":5635,"depth":329,"text":5635},{"id":5756,"depth":329,"text":5756},{"id":5793,"depth":329,"text":5793},{"id":5830,"depth":329,"text":5830},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","2000-1100","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","zh-hant:2023-10-05-cplusplus-jiao-xue","\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式",false,null,"zh-Hant","zh-hant",{},{"title":5,"description":311},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","JGmg3hMBFJgPt8LmyEwYgMlZPUe1v_EpK9fAyGOfs1I",[5914,5920,5925,5930,5935,5940,5945,5950,5955,5960,5965,5970,5975,5980,5985,5990,5995,6000,6005,6010,6015,6020,6025,6030,6035,6040,6045,6050,6055,6060,6065,6070,6075,6080,6085,6090,6095,6100,6105,6110,6114,6119,6124,6129,6134,6139,6143,6148,6153,6158,6159,6163,6168,6173,6178,6183,6188,6193,6198,6203,6208,6213,6218,6223,6228,6233,6238,6243,6248,6253,6258,6263,6268,6273,6278,6283,6288,6293,6298,6303,6308,6313,6318,6323],{"path":5915,"stem":5916,"title":5917,"date":5897,"chapterOrder":5918,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++開發環境搭建與測試","0100",0,{"path":5921,"stem":5922,"title":5923,"date":5897,"chapterOrder":5924,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基礎初識","0200",{"path":5926,"stem":5927,"title":5928,"date":5897,"chapterOrder":5929,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","數據類型與數據存放","0300",{"path":5931,"stem":5932,"title":5933,"date":5897,"chapterOrder":5934,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","輸入輸出","0400",{"path":5936,"stem":5937,"title":5938,"date":5897,"chapterOrder":5939,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":5941,"stem":5942,"title":5943,"date":5897,"chapterOrder":5944,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程結構","0600",{"path":5946,"stem":5947,"title":5948,"date":5897,"chapterOrder":5949,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","數組","0700",{"path":5951,"stem":5952,"title":5953,"date":5897,"chapterOrder":5954,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函數與頭文件","0800",{"path":5956,"stem":5957,"title":5958,"date":5897,"chapterOrder":5959,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":5961,"stem":5962,"title":5963,"date":5897,"chapterOrder":5964,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","結構體與共用體","1000",{"path":5966,"stem":5967,"title":5968,"date":5897,"chapterOrder":5969,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","內存分區與生命週期","1100",{"path":5971,"stem":5972,"title":5973,"date":5897,"chapterOrder":5974,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":5976,"stem":5977,"title":5978,"date":5897,"chapterOrder":5979,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函數提高","1300",{"path":5981,"stem":5982,"title":5983,"date":5897,"chapterOrder":5984,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空間","1350",{"path":5986,"stem":5987,"title":5988,"date":5897,"chapterOrder":5989,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封裝","1400-0100",{"path":5991,"stem":5992,"title":5993,"date":5897,"chapterOrder":5994,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","對象初始化和清理","1400-0200",{"path":5996,"stem":5997,"title":5998,"date":5897,"chapterOrder":5999,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","對象模型與this指針","1400-0300",{"path":6001,"stem":6002,"title":6003,"date":5897,"chapterOrder":6004,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元與運算符重載","1400-0400",{"path":6006,"stem":6007,"title":6008,"date":5897,"chapterOrder":6009,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","繼承","1400-0500",{"path":6011,"stem":6012,"title":6013,"date":5897,"chapterOrder":6014,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多態","1400-0600",{"path":6016,"stem":6017,"title":6018,"date":5897,"chapterOrder":6019,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","類和對象","1400",{"path":6021,"stem":6022,"title":6023,"date":5897,"chapterOrder":6024,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","函數指針","1450",{"path":6026,"stem":6027,"title":6028,"date":5897,"chapterOrder":6029,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":6031,"stem":6032,"title":6033,"date":5897,"chapterOrder":6034,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","異常處理","1600",{"path":6036,"stem":6037,"title":6038,"date":5897,"chapterOrder":6039,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":6041,"stem":6042,"title":6043,"date":5897,"chapterOrder":6044,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初識","1800-0100",{"path":6046,"stem":6047,"title":6048,"date":5897,"chapterOrder":6049,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":6051,"stem":6052,"title":6053,"date":5897,"chapterOrder":6054,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":6056,"stem":6057,"title":6058,"date":5897,"chapterOrder":6059,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":6061,"stem":6062,"title":6063,"date":5897,"chapterOrder":6064,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":6066,"stem":6067,"title":6068,"date":5897,"chapterOrder":6069,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":6071,"stem":6072,"title":6073,"date":5897,"chapterOrder":6074,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":6076,"stem":6077,"title":6078,"date":5897,"chapterOrder":6079,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":6081,"stem":6082,"title":6083,"date":5897,"chapterOrder":6084,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":6086,"stem":6087,"title":6088,"date":5897,"chapterOrder":6089,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":6091,"stem":6092,"title":6093,"date":5897,"chapterOrder":6094,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函數對象與謂詞","1800-1100",{"path":6096,"stem":6097,"title":6098,"date":5897,"chapterOrder":6099,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":6101,"stem":6102,"title":6103,"date":5897,"chapterOrder":6104,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高編程","1800",{"path":6106,"stem":6107,"title":6108,"date":5897,"chapterOrder":6109,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++類型轉換","1900",{"path":6111,"stem":6112,"title":145,"date":5897,"chapterOrder":6113,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":6115,"stem":6116,"title":6117,"date":5897,"chapterOrder":6118,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":6120,"stem":6121,"title":6122,"date":5897,"chapterOrder":6123,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":6125,"stem":6126,"title":6127,"date":5897,"chapterOrder":6128,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":6130,"stem":6131,"title":6132,"date":5897,"chapterOrder":6133,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","範圍 for 循環","2000-0500",{"path":6135,"stem":6136,"title":6137,"date":5897,"chapterOrder":6138,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","結構化綁定","2000-0600",{"path":6140,"stem":6141,"title":152,"date":5897,"chapterOrder":6142,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","2000-0700",{"path":6144,"stem":6145,"title":6146,"date":5897,"chapterOrder":6147,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":6149,"stem":6150,"title":6151,"date":5897,"chapterOrder":6152,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指針","2000-0900",{"path":6154,"stem":6155,"title":6156,"date":5897,"chapterOrder":6157,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移動語義","2000-1000",{"path":5895,"stem":5911,"title":5,"date":5897,"chapterOrder":5896,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},{"path":6160,"stem":6161,"title":163,"date":5897,"chapterOrder":6162,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","2000-1200",{"path":6164,"stem":6165,"title":6166,"date":5897,"chapterOrder":6167,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":6169,"stem":6170,"title":6171,"date":5897,"chapterOrder":6172,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":6174,"stem":6175,"title":6176,"date":5897,"chapterOrder":6177,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":6179,"stem":6180,"title":6181,"date":5897,"chapterOrder":6182,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":6184,"stem":6185,"title":6186,"date":5897,"chapterOrder":6187,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":6189,"stem":6190,"title":6191,"date":5897,"chapterOrder":6192,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":6194,"stem":6195,"title":6196,"date":5897,"chapterOrder":6197,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 與 join","2000-1900-0100",{"path":6199,"stem":6200,"title":6201,"date":5897,"chapterOrder":6202,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 與 lock_guard","2000-1900-0200",{"path":6204,"stem":6205,"title":6206,"date":5897,"chapterOrder":6207,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":6209,"stem":6210,"title":6211,"date":5897,"chapterOrder":6212,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":6214,"stem":6215,"title":6216,"date":5897,"chapterOrder":6217,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","併發編程","2000-1900",{"path":6219,"stem":6220,"title":6221,"date":5897,"chapterOrder":6222,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":6224,"stem":6225,"title":6226,"date":5897,"chapterOrder":6227,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 簡介","2000-2100",{"path":6229,"stem":6230,"title":6231,"date":5897,"chapterOrder":6232,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","現代C++","2000",{"path":6234,"stem":6235,"title":6236,"date":5897,"chapterOrder":6237,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定時器與異步 IO","2100-0100-0100",{"path":6239,"stem":6240,"title":6241,"date":5897,"chapterOrder":6242,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基礎","2100-0100-0200",{"path":6244,"stem":6245,"title":6246,"date":5897,"chapterOrder":6247,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":6249,"stem":6250,"title":6251,"date":5897,"chapterOrder":6252,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":6254,"stem":6255,"title":6256,"date":5897,"chapterOrder":6257,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":6259,"stem":6260,"title":6261,"date":5897,"chapterOrder":6262,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","機器人工程寫法與 ROS2 集成","2100-0100-0600",{"path":6264,"stem":6265,"title":6266,"date":5897,"chapterOrder":6267,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio異步IO庫","2100-0100",{"path":6269,"stem":6270,"title":6271,"date":5897,"chapterOrder":6272,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen線性代數庫","2100-0200",{"path":6274,"stem":6275,"title":6276,"date":5897,"chapterOrder":6277,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV計算機視覺庫","2100-0300",{"path":6279,"stem":6280,"title":6281,"date":5897,"chapterOrder":6282,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL點雲庫","2100-0400",{"path":6284,"stem":6285,"title":6286,"date":5897,"chapterOrder":6287,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李羣李代數庫","2100-0500",{"path":6289,"stem":6290,"title":6291,"date":5897,"chapterOrder":6292,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":6294,"stem":6295,"title":6296,"date":5897,"chapterOrder":6297,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets與構建安裝","2200-0100",{"path":6299,"stem":6300,"title":6301,"date":5897,"chapterOrder":6302,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","頂層CMake與公共編譯選項","2200-0200",{"path":6304,"stem":6305,"title":6306,"date":5897,"chapterOrder":6307,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src與lib模塊CMake詳解","2200-0300",{"path":6309,"stem":6310,"title":6311,"date":5897,"chapterOrder":6312,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方庫依賴寫法","2200-0400",{"path":6314,"stem":6315,"title":6316,"date":5897,"chapterOrder":6317,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板擴展與常見問題","2200-0500",{"path":6319,"stem":6320,"title":6321,"date":5897,"chapterOrder":6322,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":5900,"stem":6324,"title":6325,"date":5897,"chapterOrder":5905,"chapterDepth":5919,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":348},"_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":6327},[6328,6331,6332,6335,6338],{"path":6329,"localeSlug":6330,"i18nKey":5903},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","en-us",{"path":5895,"localeSlug":5907,"i18nKey":5903},{"path":6333,"localeSlug":6334,"i18nKey":5903},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","zh-hk",{"path":6336,"localeSlug":6337,"i18nKey":5903},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","zh-tw",{"path":6339,"localeSlug":6340,"i18nKey":5903},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","zh-cn",[6329,5910,5895,5910,6333,5910,6336,5910,6339,5910],1788531303425]