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