[{"data":1,"prerenderedAt":6341},["ShallowReactive",2],{"wiki-page-\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":3,"wiki-doc-items-\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":5912,"language-switcher-data-\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":6325,"wiki-i18n-paths-\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":6340},{"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":5906,"locale":5907,"localeSlug":5908,"meta":5909,"navigation":348,"path":5895,"seo":5910,"sourcePath":5906,"sourceStem":5903,"stem":5903,"wikiDepth":318,"__hash__":5911},"content\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-cn\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-cn:2023-10-05-cplusplus-jiao-xue","\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式",false,null,"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","zh-CN","zh-cn",{},{"title":5,"description":311},"G5_AmE8GRLYh2NS31lWma2CgOlcbHHbDO58WMVwOS_g",[5913,5919,5924,5929,5934,5939,5944,5949,5954,5959,5964,5969,5974,5979,5984,5989,5994,5999,6004,6009,6014,6019,6024,6029,6034,6039,6044,6049,6054,6059,6064,6069,6074,6079,6084,6089,6094,6099,6104,6109,6113,6118,6123,6128,6133,6138,6142,6147,6152,6157,6158,6162,6167,6172,6177,6182,6187,6192,6197,6202,6207,6212,6217,6222,6227,6232,6237,6242,6247,6252,6257,6262,6267,6272,6277,6282,6287,6292,6297,6302,6307,6312,6317,6322],{"path":5914,"stem":5915,"title":5916,"date":5897,"chapterOrder":5917,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试","0100",0,{"path":5920,"stem":5921,"title":5922,"date":5897,"chapterOrder":5923,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识","0200",{"path":5925,"stem":5926,"title":5927,"date":5897,"chapterOrder":5928,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放","0300",{"path":5930,"stem":5931,"title":5932,"date":5897,"chapterOrder":5933,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出","0400",{"path":5935,"stem":5936,"title":5937,"date":5897,"chapterOrder":5938,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符","0500",{"path":5940,"stem":5941,"title":5942,"date":5897,"chapterOrder":5943,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构","0600",{"path":5945,"stem":5946,"title":5947,"date":5897,"chapterOrder":5948,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组","0700",{"path":5950,"stem":5951,"title":5952,"date":5897,"chapterOrder":5953,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件","0800",{"path":5955,"stem":5956,"title":5957,"date":5897,"chapterOrder":5958,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针","0900",{"path":5960,"stem":5961,"title":5962,"date":5897,"chapterOrder":5963,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体","1000",{"path":5965,"stem":5966,"title":5967,"date":5897,"chapterOrder":5968,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期","1100",{"path":5970,"stem":5971,"title":5972,"date":5897,"chapterOrder":5973,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":5975,"stem":5976,"title":5977,"date":5897,"chapterOrder":5978,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函数提高","1300",{"path":5980,"stem":5981,"title":5982,"date":5897,"chapterOrder":5983,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空间","1350",{"path":5985,"stem":5986,"title":5987,"date":5897,"chapterOrder":5988,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装","1400-0100",{"path":5990,"stem":5991,"title":5992,"date":5897,"chapterOrder":5993,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理","1400-0200",{"path":5995,"stem":5996,"title":5997,"date":5897,"chapterOrder":5998,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针","1400-0300",{"path":6000,"stem":6001,"title":6002,"date":5897,"chapterOrder":6003,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载","1400-0400",{"path":6005,"stem":6006,"title":6007,"date":5897,"chapterOrder":6008,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承","1400-0500",{"path":6010,"stem":6011,"title":6012,"date":5897,"chapterOrder":6013,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态","1400-0600",{"path":6015,"stem":6016,"title":6017,"date":5897,"chapterOrder":6018,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象","1400",{"path":6020,"stem":6021,"title":6022,"date":5897,"chapterOrder":6023,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","函数指针","1450",{"path":6025,"stem":6026,"title":6027,"date":5897,"chapterOrder":6028,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":6030,"stem":6031,"title":6032,"date":5897,"chapterOrder":6033,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":6035,"stem":6036,"title":6037,"date":5897,"chapterOrder":6038,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":6040,"stem":6041,"title":6042,"date":5897,"chapterOrder":6043,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识","1800-0100",{"path":6045,"stem":6046,"title":6047,"date":5897,"chapterOrder":6048,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":6050,"stem":6051,"title":6052,"date":5897,"chapterOrder":6053,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":6055,"stem":6056,"title":6057,"date":5897,"chapterOrder":6058,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":6060,"stem":6061,"title":6062,"date":5897,"chapterOrder":6063,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":6065,"stem":6066,"title":6067,"date":5897,"chapterOrder":6068,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":6070,"stem":6071,"title":6072,"date":5897,"chapterOrder":6073,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":6075,"stem":6076,"title":6077,"date":5897,"chapterOrder":6078,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":6080,"stem":6081,"title":6082,"date":5897,"chapterOrder":6083,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":6085,"stem":6086,"title":6087,"date":5897,"chapterOrder":6088,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":6090,"stem":6091,"title":6092,"date":5897,"chapterOrder":6093,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函数对象与谓词","1800-1100",{"path":6095,"stem":6096,"title":6097,"date":5897,"chapterOrder":6098,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":6100,"stem":6101,"title":6102,"date":5897,"chapterOrder":6103,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程","1800",{"path":6105,"stem":6106,"title":6107,"date":5897,"chapterOrder":6108,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换","1900",{"path":6110,"stem":6111,"title":145,"date":5897,"chapterOrder":6112,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":6114,"stem":6115,"title":6116,"date":5897,"chapterOrder":6117,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":6119,"stem":6120,"title":6121,"date":5897,"chapterOrder":6122,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":6124,"stem":6125,"title":6126,"date":5897,"chapterOrder":6127,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":6129,"stem":6130,"title":6131,"date":5897,"chapterOrder":6132,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环","2000-0500",{"path":6134,"stem":6135,"title":6136,"date":5897,"chapterOrder":6137,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定","2000-0600",{"path":6139,"stem":6140,"title":152,"date":5897,"chapterOrder":6141,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","2000-0700",{"path":6143,"stem":6144,"title":6145,"date":5897,"chapterOrder":6146,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":6148,"stem":6149,"title":6150,"date":5897,"chapterOrder":6151,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针","2000-0900",{"path":6153,"stem":6154,"title":6155,"date":5897,"chapterOrder":6156,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义","2000-1000",{"path":5895,"stem":5903,"title":5,"date":5897,"chapterOrder":5896,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},{"path":6159,"stem":6160,"title":163,"date":5897,"chapterOrder":6161,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","2000-1200",{"path":6163,"stem":6164,"title":6165,"date":5897,"chapterOrder":6166,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":6168,"stem":6169,"title":6170,"date":5897,"chapterOrder":6171,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":6173,"stem":6174,"title":6175,"date":5897,"chapterOrder":6176,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":6178,"stem":6179,"title":6180,"date":5897,"chapterOrder":6181,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":6183,"stem":6184,"title":6185,"date":5897,"chapterOrder":6186,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":6188,"stem":6189,"title":6190,"date":5897,"chapterOrder":6191,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":6193,"stem":6194,"title":6195,"date":5897,"chapterOrder":6196,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 与 join","2000-1900-0100",{"path":6198,"stem":6199,"title":6200,"date":5897,"chapterOrder":6201,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":6203,"stem":6204,"title":6205,"date":5897,"chapterOrder":6206,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":6208,"stem":6209,"title":6210,"date":5897,"chapterOrder":6211,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":6213,"stem":6214,"title":6215,"date":5897,"chapterOrder":6216,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","并发编程","2000-1900",{"path":6218,"stem":6219,"title":6220,"date":5897,"chapterOrder":6221,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":6223,"stem":6224,"title":6225,"date":5897,"chapterOrder":6226,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介","2000-2100",{"path":6228,"stem":6229,"title":6230,"date":5897,"chapterOrder":6231,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++","2000",{"path":6233,"stem":6234,"title":6235,"date":5897,"chapterOrder":6236,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO","2100-0100-0100",{"path":6238,"stem":6239,"title":6240,"date":5897,"chapterOrder":6241,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础","2100-0100-0200",{"path":6243,"stem":6244,"title":6245,"date":5897,"chapterOrder":6246,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":6248,"stem":6249,"title":6250,"date":5897,"chapterOrder":6251,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":6253,"stem":6254,"title":6255,"date":5897,"chapterOrder":6256,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":6258,"stem":6259,"title":6260,"date":5897,"chapterOrder":6261,"chapterDepth":329,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","2100-0100-0600",{"path":6263,"stem":6264,"title":6265,"date":5897,"chapterOrder":6266,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库","2100-0100",{"path":6268,"stem":6269,"title":6270,"date":5897,"chapterOrder":6271,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库","2100-0200",{"path":6273,"stem":6274,"title":6275,"date":5897,"chapterOrder":6276,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库","2100-0300",{"path":6278,"stem":6279,"title":6280,"date":5897,"chapterOrder":6281,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库","2100-0400",{"path":6283,"stem":6284,"title":6285,"date":5897,"chapterOrder":6286,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库","2100-0500",{"path":6288,"stem":6289,"title":6290,"date":5897,"chapterOrder":6291,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习","2100",{"path":6293,"stem":6294,"title":6295,"date":5897,"chapterOrder":6296,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装","2200-0100",{"path":6298,"stem":6299,"title":6300,"date":5897,"chapterOrder":6301,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项","2200-0200",{"path":6303,"stem":6304,"title":6305,"date":5897,"chapterOrder":6306,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解","2200-0300",{"path":6308,"stem":6309,"title":6310,"date":5897,"chapterOrder":6311,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法","2200-0400",{"path":6313,"stem":6314,"title":6315,"date":5897,"chapterOrder":6316,"chapterDepth":318,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题","2200-0500",{"path":6318,"stem":6319,"title":6320,"date":5897,"chapterOrder":6321,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":5904},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":5900,"stem":6323,"title":6324,"date":5897,"chapterOrder":5905,"chapterDepth":5918,"docKey":5899,"docRoot":5900,"docTitle":5901,"isWikiDoc":348,"isWikiIndex":348},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":6326},[6327,6330,6333,6336,6339],{"path":6328,"localeSlug":6329,"i18nKey":5903},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","en-us",{"path":6331,"localeSlug":6332,"i18nKey":5903},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","zh-hant",{"path":6334,"localeSlug":6335,"i18nKey":5903},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","zh-hk",{"path":6337,"localeSlug":6338,"i18nKey":5903},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","zh-tw",{"path":5895,"localeSlug":5908,"i18nKey":5903},[6328,5906,6331,5906,6334,5906,6337,5906,5895,5906],1788531278903]