[{"data":1,"prerenderedAt":3114},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":2730},{"id":4,"title":5,"body":6,"chapterDepth":318,"chapterOrder":2718,"date":2719,"description":311,"docKey":2720,"docRoot":2721,"docTitle":2722,"extension":2723,"isWikiDoc":348,"isWikiIndex":2724,"meta":2725,"navigation":348,"path":2726,"seo":2727,"stem":2728,"wikiDepth":318,"__hash__":2729},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式.md","Lambda 表达式",{"type":7,"value":8,"toc":2700},"minimark",[9,13,17,35,38,41,44,47,123,130,134,158,165,168,294,297,302,305,848,855,863,867,1154,1158,1164,1168,1171,1437,1441,1447,1451,1458,1650,1654,1660,1664,1667,2147,2151,2157,2161,2164,2472,2476,2482,2499,2502,2597,2600,2634,2637,2663,2666,2696],[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},[298,864,866],{"id":865},"示例-2最基本的-lambda-语法参数和返回值","示例 2：最基本的 lambda 语法、参数和返回值",[306,868,870],{"className":308,"code":869,"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,871,872,878,885,889,897,901,905,932,945,950,954,979,995,1000,1010,1015,1024,1028,1032,1068,1101,1133,1137,1142,1150],{"__ignoreMap":311},[315,873,874,876],{"class":317,"line":318},[315,875,322],{"class":321},[315,877,334],{"class":325},[315,879,880,882],{"class":317,"line":329},[315,881,322],{"class":321},[315,883,884],{"class":325}," \u003Cstring>\n",[315,886,887],{"class":317,"line":337},[315,888,349],{"emptyLinePlaceholder":348},[315,890,891,893,895],{"class":317,"line":345},[315,892,366],{"class":321},[315,894,511],{"class":358},[315,896,514],{"class":362},[315,898,899],{"class":317,"line":352},[315,900,379],{"class":362},[315,902,903],{"class":317,"line":376},[315,904,526],{"class":525},[315,906,907,910,913,915,918,920,923,925,927,930],{"class":317,"line":382},[315,908,909],{"class":321},"    auto",[315,911,912],{"class":362}," add ",[315,914,550],{"class":321},[315,916,917],{"class":362}," [](",[315,919,366],{"class":321},[315,921,922],{"class":369}," a",[315,924,559],{"class":362},[315,926,366],{"class":321},[315,928,929],{"class":369}," b",[315,931,784],{"class":362},[315,933,934,936,939,942],{"class":317,"line":407},[315,935,479],{"class":321},[315,937,938],{"class":362}," a ",[315,940,941],{"class":321},"+",[315,943,944],{"class":362}," b;\n",[315,946,947],{"class":317,"line":413},[315,948,949],{"class":362},"    };\n",[315,951,952],{"class":317,"line":418},[315,953,349],{"emptyLinePlaceholder":348},[315,955,956,958,961,963,965,967,970,973,976],{"class":317,"line":427},[315,957,909],{"class":321},[315,959,960],{"class":362}," describe_score ",[315,962,550],{"class":321},[315,964,917],{"class":362},[315,966,366],{"class":321},[315,968,969],{"class":369}," score",[315,971,972],{"class":362},") -> ",[315,974,975],{"class":321},"std::string",[315,977,978],{"class":362}," {\n",[315,980,981,984,987,990,993],{"class":317,"line":432},[315,982,983],{"class":321},"        if",[315,985,986],{"class":362}," (score ",[315,988,989],{"class":321},">=",[315,991,992],{"class":394}," 60",[315,994,373],{"class":362},[315,996,997],{"class":317,"line":441},[315,998,999],{"class":362},"        {\n",[315,1001,1002,1005,1008],{"class":317,"line":446},[315,1003,1004],{"class":321},"            return",[315,1006,1007],{"class":325}," \"pass\"",[315,1009,404],{"class":362},[315,1011,1012],{"class":317,"line":470},[315,1013,1014],{"class":362},"        }\n",[315,1016,1017,1019,1022],{"class":317,"line":476},[315,1018,479],{"class":321},[315,1020,1021],{"class":325}," \"fail\"",[315,1023,404],{"class":362},[315,1025,1026],{"class":317,"line":489},[315,1027,949],{"class":362},[315,1029,1030],{"class":317,"line":495},[315,1031,349],{"emptyLinePlaceholder":348},[315,1033,1034,1036,1038,1040,1043,1045,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066],{"class":317,"line":501},[315,1035,538],{"class":358},[315,1037,631],{"class":362},[315,1039,634],{"class":321},[315,1041,1042],{"class":325}," \"add(3, 5) = \"",[315,1044,640],{"class":321},[315,1046,1047],{"class":358}," add",[315,1049,363],{"class":362},[315,1051,567],{"class":394},[315,1053,559],{"class":362},[315,1055,577],{"class":394},[315,1057,464],{"class":362},[315,1059,634],{"class":321},[315,1061,647],{"class":325},[315,1063,650],{"class":394},[315,1065,653],{"class":325},[315,1067,404],{"class":362},[315,1069,1070,1072,1074,1076,1079,1081,1084,1086,1089,1091,1093,1095,1097,1099],{"class":317,"line":506},[315,1071,538],{"class":358},[315,1073,631],{"class":362},[315,1075,634],{"class":321},[315,1077,1078],{"class":325}," \"score 80 is \"",[315,1080,640],{"class":321},[315,1082,1083],{"class":358}," describe_score",[315,1085,363],{"class":362},[315,1087,1088],{"class":394},"80",[315,1090,464],{"class":362},[315,1092,634],{"class":321},[315,1094,647],{"class":325},[315,1096,650],{"class":394},[315,1098,653],{"class":325},[315,1100,404],{"class":362},[315,1102,1103,1105,1107,1109,1112,1114,1116,1118,1121,1123,1125,1127,1129,1131],{"class":317,"line":517},[315,1104,538],{"class":358},[315,1106,631],{"class":362},[315,1108,634],{"class":321},[315,1110,1111],{"class":325}," \"score 40 is \"",[315,1113,640],{"class":321},[315,1115,1083],{"class":358},[315,1117,363],{"class":362},[315,1119,1120],{"class":394},"40",[315,1122,464],{"class":362},[315,1124,634],{"class":321},[315,1126,647],{"class":325},[315,1128,650],{"class":394},[315,1130,653],{"class":325},[315,1132,404],{"class":362},[315,1134,1135],{"class":317,"line":522},[315,1136,349],{"emptyLinePlaceholder":348},[315,1138,1139],{"class":317,"line":529},[315,1140,1141],{"class":525},"    \u002F\u002F 返回 0 表示程序正常结束。\n",[315,1143,1144,1146,1148],{"class":317,"line":535},[315,1145,385],{"class":321},[315,1147,401],{"class":394},[315,1149,404],{"class":362},[315,1151,1152],{"class":317,"line":587},[315,1153,410],{"class":362},[14,1155,1156,854],{},[851,1157,853],{},[306,1159,1162],{"className":1160,"code":1161,"language":860,"meta":311},[858],"add(3, 5) = 8\nscore 80 is pass\nscore 40 is fail\n",[31,1163,1161],{"__ignoreMap":311},[298,1165,1167],{"id":1166},"示例-3按值捕获和按引用捕获","示例 3：按值捕获和按引用捕获",[14,1169,1170],{},"按值捕获会保存定义 lambda 时的副本；按引用捕获会访问外部变量本身。",[306,1172,1174],{"className":308,"code":1173,"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,1175,1176,1182,1186,1194,1198,1202,1216,1220,1244,1255,1259,1263,1287,1297,1304,1308,1312,1324,1328,1360,1392,1417,1421,1425,1433],{"__ignoreMap":311},[315,1177,1178,1180],{"class":317,"line":318},[315,1179,322],{"class":321},[315,1181,334],{"class":325},[315,1183,1184],{"class":317,"line":329},[315,1185,349],{"emptyLinePlaceholder":348},[315,1187,1188,1190,1192],{"class":317,"line":337},[315,1189,366],{"class":321},[315,1191,511],{"class":358},[315,1193,514],{"class":362},[315,1195,1196],{"class":317,"line":345},[315,1197,379],{"class":362},[315,1199,1200],{"class":317,"line":352},[315,1201,526],{"class":525},[315,1203,1204,1206,1209,1211,1214],{"class":317,"line":376},[315,1205,435],{"class":321},[315,1207,1208],{"class":362}," score ",[315,1210,550],{"class":321},[315,1212,1213],{"class":394}," 10",[315,1215,404],{"class":362},[315,1217,1218],{"class":317,"line":382},[315,1219,349],{"emptyLinePlaceholder":348},[315,1221,1222,1224,1227,1229,1232,1235,1237,1239,1242],{"class":317,"line":407},[315,1223,909],{"class":321},[315,1225,1226],{"class":362}," add_by_value ",[315,1228,550],{"class":321},[315,1230,1231],{"class":362}," [",[315,1233,1234],{"class":369},"score",[315,1236,777],{"class":362},[315,1238,366],{"class":321},[315,1240,1241],{"class":369}," bonus",[315,1243,784],{"class":362},[315,1245,1246,1248,1250,1252],{"class":317,"line":413},[315,1247,479],{"class":321},[315,1249,1208],{"class":362},[315,1251,941],{"class":321},[315,1253,1254],{"class":362}," bonus;\n",[315,1256,1257],{"class":317,"line":418},[315,1258,949],{"class":362},[315,1260,1261],{"class":317,"line":427},[315,1262,349],{"emptyLinePlaceholder":348},[315,1264,1265,1267,1270,1272,1274,1277,1279,1281,1283,1285],{"class":317,"line":432},[315,1266,909],{"class":321},[315,1268,1269],{"class":362}," add_by_ref ",[315,1271,550],{"class":321},[315,1273,1231],{"class":362},[315,1275,1276],{"class":321},"&",[315,1278,1234],{"class":369},[315,1280,777],{"class":362},[315,1282,366],{"class":321},[315,1284,1241],{"class":369},[315,1286,784],{"class":362},[315,1288,1289,1292,1295],{"class":317,"line":441},[315,1290,1291],{"class":362},"        score ",[315,1293,1294],{"class":321},"+=",[315,1296,1254],{"class":362},[315,1298,1299,1301],{"class":317,"line":446},[315,1300,479],{"class":321},[315,1302,1303],{"class":362}," score;\n",[315,1305,1306],{"class":317,"line":470},[315,1307,949],{"class":362},[315,1309,1310],{"class":317,"line":476},[315,1311,349],{"emptyLinePlaceholder":348},[315,1313,1314,1317,1319,1322],{"class":317,"line":489},[315,1315,1316],{"class":362},"    score ",[315,1318,550],{"class":321},[315,1320,1321],{"class":394}," 20",[315,1323,404],{"class":362},[315,1325,1326],{"class":317,"line":495},[315,1327,349],{"emptyLinePlaceholder":348},[315,1329,1330,1332,1334,1336,1339,1341,1344,1346,1348,1350,1352,1354,1356,1358],{"class":317,"line":501},[315,1331,538],{"class":358},[315,1333,631],{"class":362},[315,1335,634],{"class":321},[315,1337,1338],{"class":325}," \"value capture result = \"",[315,1340,640],{"class":321},[315,1342,1343],{"class":358}," add_by_value",[315,1345,363],{"class":362},[315,1347,577],{"class":394},[315,1349,464],{"class":362},[315,1351,634],{"class":321},[315,1353,647],{"class":325},[315,1355,650],{"class":394},[315,1357,653],{"class":325},[315,1359,404],{"class":362},[315,1361,1362,1364,1366,1368,1371,1373,1376,1378,1380,1382,1384,1386,1388,1390],{"class":317,"line":506},[315,1363,538],{"class":358},[315,1365,631],{"class":362},[315,1367,634],{"class":321},[315,1369,1370],{"class":325}," \"ref capture result = \"",[315,1372,640],{"class":321},[315,1374,1375],{"class":358}," add_by_ref",[315,1377,363],{"class":362},[315,1379,577],{"class":394},[315,1381,464],{"class":362},[315,1383,634],{"class":321},[315,1385,647],{"class":325},[315,1387,650],{"class":394},[315,1389,653],{"class":325},[315,1391,404],{"class":362},[315,1393,1394,1396,1398,1400,1403,1405,1407,1409,1411,1413,1415],{"class":317,"line":517},[315,1395,538],{"class":358},[315,1397,631],{"class":362},[315,1399,634],{"class":321},[315,1401,1402],{"class":325}," \"score after ref capture = \"",[315,1404,640],{"class":321},[315,1406,1208],{"class":362},[315,1408,634],{"class":321},[315,1410,647],{"class":325},[315,1412,650],{"class":394},[315,1414,653],{"class":325},[315,1416,404],{"class":362},[315,1418,1419],{"class":317,"line":522},[315,1420,349],{"emptyLinePlaceholder":348},[315,1422,1423],{"class":317,"line":529},[315,1424,1141],{"class":525},[315,1426,1427,1429,1431],{"class":317,"line":535},[315,1428,385],{"class":321},[315,1430,401],{"class":394},[315,1432,404],{"class":362},[315,1434,1435],{"class":317,"line":587},[315,1436,410],{"class":362},[14,1438,1439,854],{},[851,1440,853],{},[306,1442,1445],{"className":1443,"code":1444,"language":860,"meta":311},[858],"value capture result = 15\nref capture result = 25\nscore after ref capture = 25\n",[31,1446,1444],{"__ignoreMap":311},[298,1448,1450],{"id":1449},"示例-4mutable-允许修改按值捕获的副本","示例 4：mutable 允许修改按值捕获的副本",[14,1452,1453,1454,1457],{},"按值捕获的变量默认在 lambda 内是只读的。加上 ",[31,1455,1456],{},"mutable"," 后，可以修改 lambda 自己保存的副本，但不会修改外部变量。",[306,1459,1461],{"className":308,"code":1460,"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,1462,1463,1469,1473,1481,1485,1489,1502,1506,1527,1535,1542,1546,1550,1579,1605,1630,1634,1638,1646],{"__ignoreMap":311},[315,1464,1465,1467],{"class":317,"line":318},[315,1466,322],{"class":321},[315,1468,334],{"class":325},[315,1470,1471],{"class":317,"line":329},[315,1472,349],{"emptyLinePlaceholder":348},[315,1474,1475,1477,1479],{"class":317,"line":337},[315,1476,366],{"class":321},[315,1478,511],{"class":358},[315,1480,514],{"class":362},[315,1482,1483],{"class":317,"line":345},[315,1484,379],{"class":362},[315,1486,1487],{"class":317,"line":352},[315,1488,526],{"class":525},[315,1490,1491,1493,1496,1498,1500],{"class":317,"line":376},[315,1492,435],{"class":321},[315,1494,1495],{"class":362}," start ",[315,1497,550],{"class":321},[315,1499,401],{"class":394},[315,1501,404],{"class":362},[315,1503,1504],{"class":317,"line":382},[315,1505,349],{"emptyLinePlaceholder":348},[315,1507,1508,1510,1513,1515,1517,1520,1523,1525],{"class":317,"line":407},[315,1509,909],{"class":321},[315,1511,1512],{"class":362}," counter ",[315,1514,550],{"class":321},[315,1516,1231],{"class":362},[315,1518,1519],{"class":369},"start",[315,1521,1522],{"class":362},"]() ",[315,1524,1456],{"class":321},[315,1526,978],{"class":362},[315,1528,1529,1532],{"class":317,"line":413},[315,1530,1531],{"class":321},"        ++",[315,1533,1534],{"class":362},"start;\n",[315,1536,1537,1539],{"class":317,"line":418},[315,1538,479],{"class":321},[315,1540,1541],{"class":362}," start;\n",[315,1543,1544],{"class":317,"line":427},[315,1545,949],{"class":362},[315,1547,1548],{"class":317,"line":432},[315,1549,349],{"emptyLinePlaceholder":348},[315,1551,1552,1554,1556,1558,1561,1563,1566,1569,1571,1573,1575,1577],{"class":317,"line":441},[315,1553,538],{"class":358},[315,1555,631],{"class":362},[315,1557,634],{"class":321},[315,1559,1560],{"class":325}," \"counter() = \"",[315,1562,640],{"class":321},[315,1564,1565],{"class":358}," counter",[315,1567,1568],{"class":362},"() ",[315,1570,634],{"class":321},[315,1572,647],{"class":325},[315,1574,650],{"class":394},[315,1576,653],{"class":325},[315,1578,404],{"class":362},[315,1580,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603],{"class":317,"line":446},[315,1582,538],{"class":358},[315,1584,631],{"class":362},[315,1586,634],{"class":321},[315,1588,1560],{"class":325},[315,1590,640],{"class":321},[315,1592,1565],{"class":358},[315,1594,1568],{"class":362},[315,1596,634],{"class":321},[315,1598,647],{"class":325},[315,1600,650],{"class":394},[315,1602,653],{"class":325},[315,1604,404],{"class":362},[315,1606,1607,1609,1611,1613,1616,1618,1620,1622,1624,1626,1628],{"class":317,"line":470},[315,1608,538],{"class":358},[315,1610,631],{"class":362},[315,1612,634],{"class":321},[315,1614,1615],{"class":325}," \"outside start = \"",[315,1617,640],{"class":321},[315,1619,1495],{"class":362},[315,1621,634],{"class":321},[315,1623,647],{"class":325},[315,1625,650],{"class":394},[315,1627,653],{"class":325},[315,1629,404],{"class":362},[315,1631,1632],{"class":317,"line":476},[315,1633,349],{"emptyLinePlaceholder":348},[315,1635,1636],{"class":317,"line":489},[315,1637,1141],{"class":525},[315,1639,1640,1642,1644],{"class":317,"line":495},[315,1641,385],{"class":321},[315,1643,401],{"class":394},[315,1645,404],{"class":362},[315,1647,1648],{"class":317,"line":501},[315,1649,410],{"class":362},[14,1651,1652,854],{},[851,1653,853],{},[306,1655,1658],{"className":1656,"code":1657,"language":860,"meta":311},[858],"counter() = 1\ncounter() = 2\noutside start = 0\n",[31,1659,1657],{"__ignoreMap":311},[298,1661,1663],{"id":1662},"示例-5lambda-配合-stl-算法","示例 5：lambda 配合 STL 算法",[14,1665,1666],{},"Lambda 和 STL 算法配合时最常见：排序、查找、计数、转换都可以把局部逻辑直接写在调用处。",[306,1668,1670],{"className":308,"code":1669,"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,1671,1672,1678,1684,1690,1696,1700,1708,1712,1716,1720,1764,1768,1789,1824,1848,1853,1864,1869,1890,1895,1899,1912,1928,1932,1951,1955,1971,1975,1989,2015,2040,2067,2072,2076,2094,2098,2127,2131,2135,2143],{"__ignoreMap":311},[315,1673,1674,1676],{"class":317,"line":318},[315,1675,322],{"class":321},[315,1677,326],{"class":325},[315,1679,1680,1682],{"class":317,"line":329},[315,1681,322],{"class":321},[315,1683,334],{"class":325},[315,1685,1686,1688],{"class":317,"line":337},[315,1687,322],{"class":321},[315,1689,884],{"class":325},[315,1691,1692,1694],{"class":317,"line":345},[315,1693,322],{"class":321},[315,1695,342],{"class":325},[315,1697,1698],{"class":317,"line":352},[315,1699,349],{"emptyLinePlaceholder":348},[315,1701,1702,1704,1706],{"class":317,"line":376},[315,1703,366],{"class":321},[315,1705,511],{"class":358},[315,1707,514],{"class":362},[315,1709,1710],{"class":317,"line":382},[315,1711,379],{"class":362},[315,1713,1714],{"class":317,"line":407},[315,1715,526],{"class":525},[315,1717,1718],{"class":317,"line":413},[315,1719,532],{"class":525},[315,1721,1722,1724,1726,1729,1732,1735,1737,1740,1742,1744,1747,1749,1752,1754,1757,1759,1762],{"class":317,"line":418},[315,1723,538],{"class":358},[315,1725,541],{"class":362},[315,1727,1728],{"class":321},"\u003C",[315,1730,1731],{"class":358},"std",[315,1733,1734],{"class":362},"::string",[315,1736,484],{"class":321},[315,1738,1739],{"class":362}," names ",[315,1741,550],{"class":321},[315,1743,553],{"class":362},[315,1745,1746],{"class":325},"\"Bob\"",[315,1748,559],{"class":362},[315,1750,1751],{"class":325},"\"Alice\"",[315,1753,559],{"class":362},[315,1755,1756],{"class":325},"\"Charlie\"",[315,1758,559],{"class":362},[315,1760,1761],{"class":325},"\"David\"",[315,1763,498],{"class":362},[315,1765,1766],{"class":317,"line":427},[315,1767,349],{"emptyLinePlaceholder":348},[315,1769,1770,1772,1774,1777,1780,1782,1785,1787],{"class":317,"line":432},[315,1771,538],{"class":358},[315,1773,605],{"class":362},[315,1775,1776],{"class":358},"sort",[315,1778,1779],{"class":362},"(names.",[315,1781,614],{"class":358},[315,1783,1784],{"class":362},"(), names.",[315,1786,620],{"class":358},[315,1788,765],{"class":362},[315,1790,1791,1794,1797,1799,1801,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822],{"class":317,"line":441},[315,1792,1793],{"class":362},"              [](",[315,1795,1796],{"class":321},"const",[315,1798,602],{"class":358},[315,1800,605],{"class":362},[315,1802,1803],{"class":358},"string",[315,1805,1276],{"class":321},[315,1807,922],{"class":369},[315,1809,559],{"class":362},[315,1811,1796],{"class":321},[315,1813,602],{"class":358},[315,1815,605],{"class":362},[315,1817,1803],{"class":358},[315,1819,1276],{"class":321},[315,1821,929],{"class":369},[315,1823,784],{"class":362},[315,1825,1826,1829,1832,1835,1837,1840,1843,1845],{"class":317,"line":446},[315,1827,1828],{"class":321},"                  if",[315,1830,1831],{"class":362}," (a.",[315,1833,1834],{"class":358},"size",[315,1836,1568],{"class":362},[315,1838,1839],{"class":321},"==",[315,1841,1842],{"class":362}," b.",[315,1844,1834],{"class":358},[315,1846,1847],{"class":362},"())\n",[315,1849,1850],{"class":317,"line":470},[315,1851,1852],{"class":362},"                  {\n",[315,1854,1855,1858,1860,1862],{"class":317,"line":476},[315,1856,1857],{"class":321},"                      return",[315,1859,938],{"class":362},[315,1861,1728],{"class":321},[315,1863,944],{"class":362},[315,1865,1866],{"class":317,"line":489},[315,1867,1868],{"class":362},"                  }\n",[315,1870,1871,1874,1877,1879,1881,1883,1885,1887],{"class":317,"line":495},[315,1872,1873],{"class":321},"                  return",[315,1875,1876],{"class":362}," a.",[315,1878,1834],{"class":358},[315,1880,1568],{"class":362},[315,1882,1728],{"class":321},[315,1884,1842],{"class":362},[315,1886,1834],{"class":358},[315,1888,1889],{"class":362},"();\n",[315,1891,1892],{"class":317,"line":501},[315,1893,1894],{"class":362},"              });\n",[315,1896,1897],{"class":317,"line":506},[315,1898,349],{"emptyLinePlaceholder":348},[315,1900,1901,1903,1905,1907,1910],{"class":317,"line":517},[315,1902,538],{"class":358},[315,1904,631],{"class":362},[315,1906,634],{"class":321},[315,1908,1909],{"class":325}," \"sort by length: \"",[315,1911,404],{"class":362},[315,1913,1914,1917,1920,1922,1925],{"class":317,"line":522},[315,1915,1916],{"class":321},"    for",[315,1918,1919],{"class":362}," (",[315,1921,1796],{"class":321},[315,1923,1924],{"class":321}," auto&",[315,1926,1927],{"class":362}," name : names)\n",[315,1929,1930],{"class":317,"line":529},[315,1931,473],{"class":362},[315,1933,1934,1937,1939,1941,1944,1946,1949],{"class":317,"line":535},[315,1935,1936],{"class":358},"        std",[315,1938,631],{"class":362},[315,1940,634],{"class":321},[315,1942,1943],{"class":362}," name ",[315,1945,634],{"class":321},[315,1947,1948],{"class":325}," \" \"",[315,1950,404],{"class":362},[315,1952,1953],{"class":317,"line":587},[315,1954,492],{"class":362},[315,1956,1957,1959,1961,1963,1965,1967,1969],{"class":317,"line":592},[315,1958,538],{"class":358},[315,1960,631],{"class":362},[315,1962,634],{"class":321},[315,1964,647],{"class":325},[315,1966,650],{"class":394},[315,1968,653],{"class":325},[315,1970,404],{"class":362},[315,1972,1973],{"class":317,"line":626},[315,1974,349],{"emptyLinePlaceholder":348},[315,1976,1977,1979,1982,1984,1987],{"class":317,"line":658},[315,1978,435],{"class":321},[315,1980,1981],{"class":362}," min_length ",[315,1983,550],{"class":321},[315,1985,1986],{"class":394}," 6",[315,1988,404],{"class":362},[315,1990,1991,1993,1996,1998,2000,2002,2005,2007,2009,2011,2013],{"class":317,"line":663},[315,1992,909],{"class":321},[315,1994,1995],{"class":362}," it ",[315,1997,550],{"class":321},[315,1999,602],{"class":358},[315,2001,605],{"class":362},[315,2003,2004],{"class":358},"find_if",[315,2006,1779],{"class":362},[315,2008,614],{"class":358},[315,2010,1784],{"class":362},[315,2012,620],{"class":358},[315,2014,765],{"class":362},[315,2016,2017,2020,2023,2025,2027,2029,2031,2033,2035,2038],{"class":317,"line":695},[315,2018,2019],{"class":362},"                           [",[315,2021,2022],{"class":369},"min_length",[315,2024,777],{"class":362},[315,2026,1796],{"class":321},[315,2028,602],{"class":358},[315,2030,605],{"class":362},[315,2032,1803],{"class":358},[315,2034,1276],{"class":321},[315,2036,2037],{"class":369}," name",[315,2039,784],{"class":362},[315,2041,2042,2045,2048,2050,2052,2054,2057,2059,2061,2064],{"class":317,"line":721},[315,2043,2044],{"class":321},"                               return",[315,2046,2047],{"class":362}," name.",[315,2049,1834],{"class":358},[315,2051,1568],{"class":362},[315,2053,989],{"class":321},[315,2055,2056],{"class":321}," static_cast\u003C",[315,2058,1731],{"class":358},[315,2060,605],{"class":362},[315,2062,2063],{"class":321},"size_t>",[315,2065,2066],{"class":362},"(min_length);\n",[315,2068,2069],{"class":317,"line":726},[315,2070,2071],{"class":362},"                           });\n",[315,2073,2074],{"class":317,"line":741},[315,2075,349],{"emptyLinePlaceholder":348},[315,2077,2078,2081,2084,2087,2090,2092],{"class":317,"line":768},[315,2079,2080],{"class":321},"    if",[315,2082,2083],{"class":362}," (it ",[315,2085,2086],{"class":321},"!=",[315,2088,2089],{"class":362}," names.",[315,2091,620],{"class":358},[315,2093,1847],{"class":362},[315,2095,2096],{"class":317,"line":787},[315,2097,473],{"class":362},[315,2099,2100,2102,2104,2106,2109,2111,2114,2117,2119,2121,2123,2125],{"class":317,"line":799},[315,2101,1936],{"class":358},[315,2103,631],{"class":362},[315,2105,634],{"class":321},[315,2107,2108],{"class":325}," \"first long name = \"",[315,2110,640],{"class":321},[315,2112,2113],{"class":321}," *",[315,2115,2116],{"class":362},"it ",[315,2118,634],{"class":321},[315,2120,647],{"class":325},[315,2122,650],{"class":394},[315,2124,653],{"class":325},[315,2126,404],{"class":362},[315,2128,2129],{"class":317,"line":805},[315,2130,492],{"class":362},[315,2132,2133],{"class":317,"line":831},[315,2134,349],{"emptyLinePlaceholder":348},[315,2136,2137,2139,2141],{"class":317,"line":836},[315,2138,385],{"class":321},[315,2140,401],{"class":394},[315,2142,404],{"class":362},[315,2144,2145],{"class":317,"line":845},[315,2146,410],{"class":362},[14,2148,2149,854],{},[851,2150,853],{},[306,2152,2155],{"className":2153,"code":2154,"language":860,"meta":311},[858],"sort by length: Bob Alice David Charlie\nfirst long name = Charlie\n",[31,2156,2154],{"__ignoreMap":311},[298,2158,2160],{"id":2159},"示例-6保存回调时要注意捕获生命周期","示例 6：保存回调时要注意捕获生命周期",[14,2162,2163],{},"如果 lambda 只是立刻调用，引用捕获通常看起来没问题；如果保存到容器、线程、定时器或异步回调里，lambda 可能晚于局部变量执行。保存回调时优先按值捕获需要的数据。",[306,2165,2167],{"className":308,"code":2166,"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,2168,2169,2176,2182,2188,2194,2198,2206,2210,2214,2219,2223,2247,2251,2255,2269,2283,2287,2313,2347,2352,2359,2363,2382,2415,2420,2424,2428,2441,2445,2452,2456,2460,2468],{"__ignoreMap":311},[315,2170,2171,2173],{"class":317,"line":318},[315,2172,322],{"class":321},[315,2174,2175],{"class":325}," \u003Cfunctional>\n",[315,2177,2178,2180],{"class":317,"line":329},[315,2179,322],{"class":321},[315,2181,334],{"class":325},[315,2183,2184,2186],{"class":317,"line":337},[315,2185,322],{"class":321},[315,2187,884],{"class":325},[315,2189,2190,2192],{"class":317,"line":345},[315,2191,322],{"class":321},[315,2193,342],{"class":325},[315,2195,2196],{"class":317,"line":352},[315,2197,349],{"emptyLinePlaceholder":348},[315,2199,2200,2202,2204],{"class":317,"line":376},[315,2201,366],{"class":321},[315,2203,511],{"class":358},[315,2205,514],{"class":362},[315,2207,2208],{"class":317,"line":382},[315,2209,379],{"class":362},[315,2211,2212],{"class":317,"line":407},[315,2213,526],{"class":525},[315,2215,2216],{"class":317,"line":413},[315,2217,2218],{"class":525},"    \u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\n",[315,2220,2221],{"class":317,"line":418},[315,2222,532],{"class":525},[315,2224,2225,2227,2229,2231,2233,2236,2239,2241,2244],{"class":317,"line":427},[315,2226,538],{"class":358},[315,2228,541],{"class":362},[315,2230,1728],{"class":321},[315,2232,1731],{"class":358},[315,2234,2235],{"class":362},"::function",[315,2237,2238],{"class":321},"\u003Cvoid",[315,2240,455],{"class":362},[315,2242,2243],{"class":321},">>",[315,2245,2246],{"class":362}," callbacks;\n",[315,2248,2249],{"class":317,"line":432},[315,2250,349],{"emptyLinePlaceholder":348},[315,2252,2253],{"class":317,"line":441},[315,2254,473],{"class":362},[315,2256,2257,2259,2262,2264,2267],{"class":317,"line":446},[315,2258,1936],{"class":358},[315,2260,2261],{"class":362},"::string name ",[315,2263,550],{"class":321},[315,2265,2266],{"class":325}," \"Alice\"",[315,2268,404],{"class":362},[315,2270,2271,2274,2276,2278,2281],{"class":317,"line":470},[315,2272,2273],{"class":321},"        int",[315,2275,1208],{"class":362},[315,2277,550],{"class":321},[315,2279,2280],{"class":394}," 95",[315,2282,404],{"class":362},[315,2284,2285],{"class":317,"line":476},[315,2286,349],{"emptyLinePlaceholder":348},[315,2288,2289,2292,2295,2297,2299,2301,2304,2306,2308,2310],{"class":317,"line":489},[315,2290,2291],{"class":321},"        auto",[315,2293,2294],{"class":362}," print_now ",[315,2296,550],{"class":321},[315,2298,1231],{"class":362},[315,2300,1276],{"class":321},[315,2302,2303],{"class":369},"name",[315,2305,559],{"class":362},[315,2307,1276],{"class":321},[315,2309,1234],{"class":369},[315,2311,2312],{"class":362},"]() {\n",[315,2314,2315,2318,2320,2322,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345],{"class":317,"line":495},[315,2316,2317],{"class":358},"            std",[315,2319,631],{"class":362},[315,2321,634],{"class":321},[315,2323,2324],{"class":325}," \"now: \"",[315,2326,640],{"class":321},[315,2328,1943],{"class":362},[315,2330,634],{"class":321},[315,2332,1948],{"class":325},[315,2334,640],{"class":321},[315,2336,1208],{"class":362},[315,2338,634],{"class":321},[315,2340,647],{"class":325},[315,2342,650],{"class":394},[315,2344,653],{"class":325},[315,2346,404],{"class":362},[315,2348,2349],{"class":317,"line":501},[315,2350,2351],{"class":362},"        };\n",[315,2353,2354,2357],{"class":317,"line":506},[315,2355,2356],{"class":358},"        print_now",[315,2358,1889],{"class":362},[315,2360,2361],{"class":317,"line":517},[315,2362,349],{"emptyLinePlaceholder":348},[315,2364,2365,2368,2371,2374,2376,2378,2380],{"class":317,"line":522},[315,2366,2367],{"class":362},"        callbacks.",[315,2369,2370],{"class":358},"push_back",[315,2372,2373],{"class":362},"([",[315,2375,2303],{"class":369},[315,2377,559],{"class":362},[315,2379,1234],{"class":369},[315,2381,2312],{"class":362},[315,2383,2384,2386,2388,2390,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413],{"class":317,"line":529},[315,2385,2317],{"class":358},[315,2387,631],{"class":362},[315,2389,634],{"class":321},[315,2391,2392],{"class":325}," \"saved: \"",[315,2394,640],{"class":321},[315,2396,1943],{"class":362},[315,2398,634],{"class":321},[315,2400,1948],{"class":325},[315,2402,640],{"class":321},[315,2404,1208],{"class":362},[315,2406,634],{"class":321},[315,2408,647],{"class":325},[315,2410,650],{"class":394},[315,2412,653],{"class":325},[315,2414,404],{"class":362},[315,2416,2417],{"class":317,"line":535},[315,2418,2419],{"class":362},"        });\n",[315,2421,2422],{"class":317,"line":587},[315,2423,492],{"class":362},[315,2425,2426],{"class":317,"line":592},[315,2427,349],{"emptyLinePlaceholder":348},[315,2429,2430,2432,2434,2436,2438],{"class":317,"line":626},[315,2431,1916],{"class":321},[315,2433,1919],{"class":362},[315,2435,1796],{"class":321},[315,2437,1924],{"class":321},[315,2439,2440],{"class":362}," callback : callbacks)\n",[315,2442,2443],{"class":317,"line":658},[315,2444,473],{"class":362},[315,2446,2447,2450],{"class":317,"line":663},[315,2448,2449],{"class":358},"        callback",[315,2451,1889],{"class":362},[315,2453,2454],{"class":317,"line":695},[315,2455,492],{"class":362},[315,2457,2458],{"class":317,"line":721},[315,2459,349],{"emptyLinePlaceholder":348},[315,2461,2462,2464,2466],{"class":317,"line":726},[315,2463,385],{"class":321},[315,2465,401],{"class":394},[315,2467,404],{"class":362},[315,2469,2470],{"class":317,"line":741},[315,2471,410],{"class":362},[14,2473,2474,854],{},[851,2475,853],{},[306,2477,2480],{"className":2478,"code":2479,"language":860,"meta":311},[858],"now: Alice 95\nsaved: Alice 95\n",[31,2481,2479],{"__ignoreMap":311},[14,2483,2484,2485,2488,2489,2492,2493,2495,2496,2498],{},"这里 ",[31,2486,2487],{},"print_now"," 立刻调用，所以引用捕获没问题。保存到 ",[31,2490,2491],{},"callbacks"," 的 lambda 用按值捕获，因为离开内部作用域后，",[31,2494,2303],{}," 和 ",[31,2497,1234],{}," 已经销毁。",[10,2500,2501],{"id":2501},"关键语法解释",[48,2503,2504,2517],{},[51,2505,2506],{},[54,2507,2508,2511,2514],{},[57,2509,2510],{"align":59},"示例",[57,2512,2513],{"align":59},"重点",[57,2515,2516],{"align":59},"说明",[68,2518,2519,2530,2541,2556,2568,2586],{},[54,2520,2521,2524,2527],{},[73,2522,2523],{"align":59},"示例 1",[73,2525,2526],{"align":59},"旧回调写法对比",[73,2528,2529],{"align":59},"普通函数、函数对象都能做回调，但 lambda 更适合局部短逻辑",[54,2531,2532,2535,2538],{},[73,2533,2534],{"align":59},"示例 2",[73,2536,2537],{"align":59},"参数和返回值",[73,2539,2540],{"align":59},"返回类型通常可推导，分支返回不同类型时要显式写清楚",[54,2542,2543,2546,2548],{},[73,2544,2545],{"align":59},"示例 3",[73,2547,75],{"align":59},[73,2549,2550,2552,2553,2555],{"align":59},[31,2551,203],{}," 拷贝，",[31,2554,219],{}," 引用",[54,2557,2558,2561,2565],{},[73,2559,2560],{"align":59},"示例 4",[73,2562,2563],{"align":59},[31,2564,1456],{},[73,2566,2567],{"align":59},"修改的是 lambda 内部副本，不影响外部变量",[54,2569,2570,2573,2576],{},[73,2571,2572],{"align":59},"示例 5",[73,2574,2575],{"align":59},"STL 算法",[73,2577,2578,2580,2581,2580,2583,2585],{"align":59},[31,2579,1776],{},"、",[31,2582,2004],{},[31,2584,608],{}," 常和 lambda 配合",[54,2587,2588,2591,2594],{},[73,2589,2590],{"align":59},"示例 6",[73,2592,2593],{"align":59},"生命周期",[73,2595,2596],{"align":59},"保存回调、异步回调、线程回调中不要随便引用捕获局部变量",[10,2598,2599],{"id":2599},"常见错误",[18,2601,2602,2608,2611,2616,2625],{},[21,2603,2604,2605,2607],{},"保存回调时使用默认引用捕获 ",[31,2606,259],{},"，导致局部变量销毁后仍被访问。",[21,2609,2610],{},"以为按值捕获会跟着外部变量变化。按值捕获保存的是定义 lambda 时的副本。",[21,2612,2613,2614,146],{},"想修改按值捕获的副本，却忘记加 ",[31,2615,1456],{},[21,2617,2618,2619,2621,2622,2624],{},"把有捕获的 lambda 当成函数指针使用。有捕获的 lambda 需要用模板参数、",[31,2620,145],{}," 变量或 ",[31,2623,163],{}," 保存。",[21,2626,2627,2628,2630,2631,2633],{},"异步场景捕获 ",[31,2629,293],{}," 后，对象先被销毁。需要保证对象生命周期，或使用智能指针、",[31,2632,156],{}," 等更明确的方式。",[10,2635,2636],{"id":2636},"使用建议",[18,2638,2639,2642,2652,2655,2658],{},[21,2640,2641],{},"小而局部的逻辑优先用 lambda。",[21,2643,2644,2645,2647,2648,2495,2650,146],{},"捕获列表尽量显式写 ",[31,2646,80],{},"，少用默认 ",[31,2649,246],{},[31,2651,259],{},[21,2653,2654],{},"保存回调、线程、定时器、异步操作中优先按值捕获需要的数据。",[21,2656,2657],{},"只调用一次、不需要保存的回调，可以直接把 lambda 传给算法或函数模板。",[21,2659,2660,2661,146],{},"需要统一保存不同 lambda 时，再使用下一节的 ",[31,2662,163],{},[10,2664,2665],{"id":2665},"小结",[135,2667,2668,2674,2677,2685,2690,2693],{},[21,2669,2670,2671,146],{},"Lambda 是匿名可调用对象，写法是 ",[31,2672,2673],{},"[捕获](参数) { 函数体 }",[21,2675,2676],{},"捕获列表决定 lambda 如何使用外部变量。",[21,2678,2679,2681,2682,2684],{},[31,2680,203],{}," 是按值捕获，",[31,2683,219],{}," 是按引用捕获。",[21,2686,2687,2689],{},[31,2688,1456],{}," 允许修改按值捕获的内部副本。",[21,2691,2692],{},"Lambda 最常用于 STL 算法、回调和异步任务。",[21,2694,2695],{},"生命周期是 Lambda 最容易出错的地方，尤其是保存回调和异步回调。",[2697,2698,2699],"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":2701},[2702,2703,2704,2705,2706,2714,2715,2716,2717],{"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":2707},[2708,2709,2710,2711,2712,2713],{"id":300,"depth":337,"text":301},{"id":865,"depth":337,"text":866},{"id":1166,"depth":337,"text":1167},{"id":1449,"depth":337,"text":1450},{"id":1662,"depth":337,"text":1663},{"id":2159,"depth":337,"text":2160},{"id":2501,"depth":329,"text":2501},{"id":2599,"depth":329,"text":2599},{"id":2636,"depth":329,"text":2636},{"id":2665,"depth":329,"text":2665},"2000-1100","2023-10-05","2023-10-05-cplusplus-jiao-xue","\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md",false,{},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi",{"title":5,"description":311},"wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","ZuE41h6kQHP5PuW9Dle3HIL1W5ZsKdZxKQJ5Bl3lEVk",[2731,2737,2742,2747,2752,2757,2762,2767,2772,2777,2782,2787,2792,2797,2802,2807,2812,2817,2822,2827,2832,2837,2842,2847,2852,2857,2862,2867,2872,2877,2882,2887,2892,2897,2901,2906,2911,2916,2921,2926,2930,2935,2940,2945,2946,2950,2955,2960,2965,2970,2975,2980,2985,2990,2995,3000,3005,3010,3015,3020,3025,3030,3035,3040,3045,3050,3055,3060,3065,3070,3075,3080,3085,3090,3095,3100,3105,3110],{"path":2732,"stem":2733,"title":2734,"date":2719,"chapterOrder":2735,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2738,"stem":2739,"title":2740,"date":2719,"chapterOrder":2741,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识","0200",{"path":2743,"stem":2744,"title":2745,"date":2719,"chapterOrder":2746,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2748,"stem":2749,"title":2750,"date":2719,"chapterOrder":2751,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出","0400",{"path":2753,"stem":2754,"title":2755,"date":2719,"chapterOrder":2756,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符","0500",{"path":2758,"stem":2759,"title":2760,"date":2719,"chapterOrder":2761,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构","0600",{"path":2763,"stem":2764,"title":2765,"date":2719,"chapterOrder":2766,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组","0700",{"path":2768,"stem":2769,"title":2770,"date":2719,"chapterOrder":2771,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件","0800",{"path":2773,"stem":2774,"title":2775,"date":2719,"chapterOrder":2776,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针","0900",{"path":2778,"stem":2779,"title":2780,"date":2719,"chapterOrder":2781,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体","1000",{"path":2783,"stem":2784,"title":2785,"date":2719,"chapterOrder":2786,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2788,"stem":2789,"title":2790,"date":2719,"chapterOrder":2791,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":2793,"stem":2794,"title":2795,"date":2719,"chapterOrder":2796,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函数提高与命名空间","1300",{"path":2798,"stem":2799,"title":2800,"date":2719,"chapterOrder":2801,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装","1400-0100",{"path":2803,"stem":2804,"title":2805,"date":2719,"chapterOrder":2806,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2808,"stem":2809,"title":2810,"date":2719,"chapterOrder":2811,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2813,"stem":2814,"title":2815,"date":2719,"chapterOrder":2816,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2818,"stem":2819,"title":2820,"date":2719,"chapterOrder":2821,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承","1400-0500",{"path":2823,"stem":2824,"title":2825,"date":2719,"chapterOrder":2826,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态","1400-0600",{"path":2828,"stem":2829,"title":2830,"date":2719,"chapterOrder":2831,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象","1400",{"path":2833,"stem":2834,"title":2835,"date":2719,"chapterOrder":2836,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":2838,"stem":2839,"title":2840,"date":2719,"chapterOrder":2841,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":2843,"stem":2844,"title":2845,"date":2719,"chapterOrder":2846,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":2848,"stem":2849,"title":2850,"date":2719,"chapterOrder":2851,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识","1800-0100",{"path":2853,"stem":2854,"title":2855,"date":2719,"chapterOrder":2856,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2858,"stem":2859,"title":2860,"date":2719,"chapterOrder":2861,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":2863,"stem":2864,"title":2865,"date":2719,"chapterOrder":2866,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-yu-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector与deque容器","vector与deque容器","1800-0400",{"path":2868,"stem":2869,"title":2870,"date":2719,"chapterOrder":2871,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-stack-queue-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-stack-queue-list容器","stack \u002F queue \u002F list 容器","1800-0500",{"path":2873,"stem":2874,"title":2875,"date":2719,"chapterOrder":2876,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-set-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-set-map容器","set \u002F map 容器","1800-0600",{"path":2878,"stem":2879,"title":2880,"date":2719,"chapterOrder":2881,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-函数对象与谓词","函数对象与谓词","1800-0700",{"path":2883,"stem":2884,"title":2885,"date":2719,"chapterOrder":2886,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-常用算法","常用算法","1800-0800",{"path":2888,"stem":2889,"title":2890,"date":2719,"chapterOrder":2891,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程","1800",{"path":2893,"stem":2894,"title":2895,"date":2719,"chapterOrder":2896,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换","1900",{"path":2898,"stem":2899,"title":145,"date":2719,"chapterOrder":2900,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":2902,"stem":2903,"title":2904,"date":2719,"chapterOrder":2905,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":2907,"stem":2908,"title":2909,"date":2719,"chapterOrder":2910,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":2912,"stem":2913,"title":2914,"date":2719,"chapterOrder":2915,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2917,"stem":2918,"title":2919,"date":2719,"chapterOrder":2920,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2922,"stem":2923,"title":2924,"date":2719,"chapterOrder":2925,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定","2000-0600",{"path":2927,"stem":2928,"title":152,"date":2719,"chapterOrder":2929,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","2000-0700",{"path":2931,"stem":2932,"title":2933,"date":2719,"chapterOrder":2934,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":2936,"stem":2937,"title":2938,"date":2719,"chapterOrder":2939,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针","2000-0900",{"path":2941,"stem":2942,"title":2943,"date":2719,"chapterOrder":2944,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2726,"stem":2728,"title":5,"date":2719,"chapterOrder":2718,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},{"path":2947,"stem":2948,"title":163,"date":2719,"chapterOrder":2949,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","2000-1200",{"path":2951,"stem":2952,"title":2953,"date":2719,"chapterOrder":2954,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2956,"stem":2957,"title":2958,"date":2719,"chapterOrder":2959,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2961,"stem":2962,"title":2963,"date":2719,"chapterOrder":2964,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2966,"stem":2967,"title":2968,"date":2719,"chapterOrder":2969,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2971,"stem":2972,"title":2973,"date":2719,"chapterOrder":2974,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2976,"stem":2977,"title":2978,"date":2719,"chapterOrder":2979,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2981,"stem":2982,"title":2983,"date":2719,"chapterOrder":2984,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2986,"stem":2987,"title":2988,"date":2719,"chapterOrder":2989,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2991,"stem":2992,"title":2993,"date":2719,"chapterOrder":2994,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":2996,"stem":2997,"title":2998,"date":2719,"chapterOrder":2999,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3001,"stem":3002,"title":3003,"date":2719,"chapterOrder":3004,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","并发编程","2000-1900",{"path":3006,"stem":3007,"title":3008,"date":2719,"chapterOrder":3009,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3011,"stem":3012,"title":3013,"date":2719,"chapterOrder":3014,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介","2000-2100",{"path":3016,"stem":3017,"title":3018,"date":2719,"chapterOrder":3019,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++","2000",{"path":3021,"stem":3022,"title":3023,"date":2719,"chapterOrder":3024,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3026,"stem":3027,"title":3028,"date":2719,"chapterOrder":3029,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3031,"stem":3032,"title":3033,"date":2719,"chapterOrder":3034,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3036,"stem":3037,"title":3038,"date":2719,"chapterOrder":3039,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3041,"stem":3042,"title":3043,"date":2719,"chapterOrder":3044,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3046,"stem":3047,"title":3048,"date":2719,"chapterOrder":3049,"chapterDepth":329,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3051,"stem":3052,"title":3053,"date":2719,"chapterOrder":3054,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3056,"stem":3057,"title":3058,"date":2719,"chapterOrder":3059,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3061,"stem":3062,"title":3063,"date":2719,"chapterOrder":3064,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3066,"stem":3067,"title":3068,"date":2719,"chapterOrder":3069,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3071,"stem":3072,"title":3073,"date":2719,"chapterOrder":3074,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3076,"stem":3077,"title":3078,"date":2719,"chapterOrder":3079,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习","2100",{"path":3081,"stem":3082,"title":3083,"date":2719,"chapterOrder":3084,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3086,"stem":3087,"title":3088,"date":2719,"chapterOrder":3089,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3091,"stem":3092,"title":3093,"date":2719,"chapterOrder":3094,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3096,"stem":3097,"title":3098,"date":2719,"chapterOrder":3099,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3101,"stem":3102,"title":3103,"date":2719,"chapterOrder":3104,"chapterDepth":318,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\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":3106,"stem":3107,"title":3108,"date":2719,"chapterOrder":3109,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":2724},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":2721,"stem":3111,"title":3112,"date":2719,"chapterOrder":3113,"chapterDepth":2736,"docKey":2720,"docRoot":2721,"docTitle":2722,"isWikiDoc":348,"isWikiIndex":348},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",null,1784505234509]