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