[{"data":1,"prerenderedAt":3937},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3516,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3921,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3936},{"id":4,"title":5,"body":6,"canonicalPath":3498,"chapterDepth":73,"chapterOrder":3499,"date":3500,"description":66,"docI18nKey":3501,"docKey":3502,"docRoot":3503,"docTitle":3504,"extension":3505,"i18nKey":3506,"isBlogPost":3507,"isWikiDoc":223,"isWikiIndex":3507,"layout":3508,"legacyPath":3508,"locale":3509,"localeSlug":3510,"meta":3511,"navigation":223,"path":3498,"seo":3512,"sourcePath":3513,"sourceStem":3506,"stem":3514,"wikiDepth":73,"__hash__":3515},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定.md","structured binding",{"type":7,"value":8,"toc":3474},"minimark",[9,14,38,46,50,53,57,60,86,90,101,105,108,111,138,158,172,260,263,316,326,330,386,390,393,464,468,473,1001,1006,1014,1018,1550,1554,1560,1564,2030,2034,2040,2044,2571,2575,2581,2585,2588,2592,2595,2598,2646,2660,2670,2686,2697,2708,2716,2758,2762,3114,3118,3124,3139,3143,3148,3193,3196,3201,3259,3266,3277,3328,3335,3338,3357,3360,3383,3400,3413,3427,3431,3441,3446,3454,3470],[10,11,13],"h2",{"id":12},"what-problem-does-this-section-solve","What problem does this section solve?",[15,16,17,18,22,23,26,27,30,31,22,34,37],"p",{},"When a function needs to return multiple values (like a success flag plus data), or when you need to access both the key and value while iterating through a map, prior to C++17 you had to use workarounds like ",[19,20,21],"code",{},"std::pair"," \u002F ",[19,24,25],{},"std::tuple"," with ",[19,28,29],{},"std::get\u003C>()",", or ",[19,32,33],{},".first",[19,35,36],{},".second","—making the code verbose and harder to read.",[15,39,40,41,45],{},"Structured bindings allow you to ",[42,43,44],"strong",{},"decompose composite types (pair, tuple, structs) into individual variables in one line of code",", making the code much clearer.",[10,47,49],{"id":48},"what-is-this-feature","What is this feature?",[15,51,52],{},"Structured Bindings, introduced in C++17, allow you to \"bind\" elements from a struct, pair, tuple, or array to individual variable names.",[10,54,56],{"id":55},"c-standard-version","C++ standard version",[15,58,59],{},"C++17。编译本节完整示例时，需要启用 C++17 或更高标准，例如：",[61,62,67],"pre",{"className":63,"code":64,"language":65,"meta":66,"style":66},"language-bash shiki shiki-themes github-light github-dark","g++ example.cpp -std=c++17\n","bash","",[19,68,69],{"__ignoreMap":66},[70,71,74,78,82],"span",{"class":72,"line":73},"line",1,[70,75,77],{"class":76},"sScJk","g++",[70,79,81],{"class":80},"sZZnC"," example.cpp",[70,83,85],{"class":84},"sj4cs"," -std=c++17\n",[10,87,89],{"id":88},"required-header-files","Required header files",[15,91,92,93,96,97,100],{},"No additional header files are needed. Structured binding is a language feature. For use with tuples, you need ",[19,94,95],{},"\u003Ctuple>",", and for use with pairs, you need ",[19,98,99],{},"\u003Cutility>",".",[10,102,104],{"id":103},"从-c17-前的写法到结构化绑定","从 C++17 前的写法到结构化绑定",[15,106,107],{},"C++17 之前没有统一的“解包”语法。面对不同的复合类型，需要使用各自的访问方式：",[15,109,110],{},"|type|C++17 之前的访问方式|C++17 结构化绑定|",[15,112,113,114,116,117,119,120,116,122,125,126,116,128,119,131,134,135,116],{},"|:---|:---|:---|\n|",[19,115,21],{},"|",[19,118,33],{},"、",[19,121,36],{},[19,123,124],{},"auto [first, second] = pair;","|\n|",[19,127,25],{},[19,129,130],{},"std::get\u003C0>()",[19,132,133],{},"std::get\u003C1>()"," 等|",[19,136,137],{},"auto [a, b, ...] = tuple;",[15,139,140,141,116,144,147,148,119,151,154,155,116],{},"|structure|",[19,142,143],{},".成员名",[19,145,146],{},"auto [a, b, ...] = object;","|\n|array|",[19,149,150],{},"[0]",[19,152,153],{},"[1]"," 等下标|",[19,156,157],{},"auto [a, b, ...] = array;",[15,159,160,161,163,164,167,168,171],{},"以 ",[19,162,21],{}," 为例，C++17 之前需要分别访问 ",[19,165,166],{},"first"," 和 ",[19,169,170],{},"second","：",[61,173,177],{"className":174,"code":175,"language":176,"meta":66,"style":66},"language-cpp shiki shiki-themes github-light github-dark","std::pair\u003Cint, bool> result = {5, true};\n\n\u002F\u002F C++17 之前：通过 pair 固定的成员名 first 和 second 取出两个值。\nint value = result.first;\nbool ok = result.second;\n","cpp",[19,178,179,218,225,232,246],{"__ignoreMap":66},[70,180,181,184,188,192,195,198,201,204,207,210,212,215],{"class":72,"line":73},[70,182,183],{"class":76},"std",[70,185,187],{"class":186},"sVt8B","::pair",[70,189,191],{"class":190},"szBVR","\u003Cint",[70,193,194],{"class":186},", ",[70,196,197],{"class":190},"bool>",[70,199,200],{"class":186}," result ",[70,202,203],{"class":190},"=",[70,205,206],{"class":186}," {",[70,208,209],{"class":84},"5",[70,211,194],{"class":186},[70,213,214],{"class":84},"true",[70,216,217],{"class":186},"};\n",[70,219,221],{"class":72,"line":220},2,[70,222,224],{"emptyLinePlaceholder":223},true,"\n",[70,226,228],{"class":72,"line":227},3,[70,229,231],{"class":230},"sJ8bj","\u002F\u002F C++17 之前：通过 pair 固定的成员名 first 和 second 取出两个值。\n",[70,233,235,238,241,243],{"class":72,"line":234},4,[70,236,237],{"class":190},"int",[70,239,240],{"class":186}," value ",[70,242,203],{"class":190},[70,244,245],{"class":186}," result.first;\n",[70,247,249,252,255,257],{"class":72,"line":248},5,[70,250,251],{"class":190},"bool",[70,253,254],{"class":186}," ok ",[70,256,203],{"class":190},[70,258,259],{"class":186}," result.second;\n",[15,261,262],{},"C++17 开始，可以使用结构化绑定一次取出两个值，并根据含义为它们命名：",[61,264,266],{"className":174,"code":265,"language":176,"meta":66,"style":66},"std::pair\u003Cint, bool> result = {5, true};\n\n\u002F\u002F C++17：value 对应 result.first，ok 对应 result.second。\nauto [value, ok] = result;\n",[19,267,268,294,298,303],{"__ignoreMap":66},[70,269,270,272,274,276,278,280,282,284,286,288,290,292],{"class":72,"line":73},[70,271,183],{"class":76},[70,273,187],{"class":186},[70,275,191],{"class":190},[70,277,194],{"class":186},[70,279,197],{"class":190},[70,281,200],{"class":186},[70,283,203],{"class":190},[70,285,206],{"class":186},[70,287,209],{"class":84},[70,289,194],{"class":186},[70,291,214],{"class":84},[70,293,217],{"class":186},[70,295,296],{"class":72,"line":220},[70,297,224],{"emptyLinePlaceholder":223},[70,299,300],{"class":72,"line":227},[70,301,302],{"class":230},"\u002F\u002F C++17：value 对应 result.first，ok 对应 result.second。\n",[70,304,305,308,311,313],{"class":72,"line":234},[70,306,307],{"class":190},"auto",[70,309,310],{"class":186}," [value, ok] ",[70,312,203],{"class":190},[70,314,315],{"class":186}," result;\n",[15,317,318,319,119,322,325],{},"结构化绑定没有改变 ",[19,320,321],{},"pair",[19,323,324],{},"tuple","、结构体或数组本身，只是提供了一套统一、简洁的取值语法。方括号中的变量按元素或成员的原有顺序一一对应。",[10,327,329],{"id":328},"basic-syntax","Basic Syntax",[61,331,333],{"className":174,"code":332,"language":176,"meta":66,"style":66},"\u002F\u002F 以下三种写法都是 C++17 开始支持的结构化绑定。\nauto [变量1, 变量2, ...] = 表达式;        \u002F\u002F 值绑定：通常会得到各元素的副本。\nauto& [变量1, 变量2, ...] = 表达式;       \u002F\u002F 引用绑定：可以通过变量修改原对象。\nconst auto& [变量1, 变量2, ...] = 表达式;  \u002F\u002F 只读引用绑定：不拷贝，也不允许修改。\n",[19,334,335,340,355,369],{"__ignoreMap":66},[70,336,337],{"class":72,"line":73},[70,338,339],{"class":230},"\u002F\u002F 以下三种写法都是 C++17 开始支持的结构化绑定。\n",[70,341,342,344,347,349,352],{"class":72,"line":220},[70,343,307],{"class":190},[70,345,346],{"class":186}," [变量1, 变量2, ...] ",[70,348,203],{"class":190},[70,350,351],{"class":186}," 表达式;",[70,353,354],{"class":230},"        \u002F\u002F 值绑定：通常会得到各元素的副本。\n",[70,356,357,360,362,364,366],{"class":72,"line":227},[70,358,359],{"class":190},"auto&",[70,361,346],{"class":186},[70,363,203],{"class":190},[70,365,351],{"class":186},[70,367,368],{"class":230},"       \u002F\u002F 引用绑定：可以通过变量修改原对象。\n",[70,370,371,374,377,379,381,383],{"class":72,"line":234},[70,372,373],{"class":190},"const",[70,375,376],{"class":190}," auto&",[70,378,346],{"class":186},[70,380,203],{"class":190},[70,382,351],{"class":186},[70,384,385],{"class":230},"  \u002F\u002F 只读引用绑定：不拷贝，也不允许修改。\n",[10,387,389],{"id":388},"common-usage","Common Usage",[15,391,392],{},"下表中的写法都需要启用 C++17 或更高版本：",[394,395,396,410],"table",{},[397,398,399],"thead",{},[400,401,402,407],"tr",{},[403,404,406],"th",{"align":405},"left","Usage",[403,408,409],{"align":405},"Explanation",[411,412,413,424,434,444,454],"tbody",{},[400,414,415,421],{},[416,417,418],"td",{"align":405},[19,419,420],{},"auto [x, y] = pair",[416,422,423],{"align":405},"Unpack pair",[400,425,426,431],{},[416,427,428],{"align":405},[19,429,430],{},"auto [a, b, c] = std::tuple\u003C...>(...)",[416,432,433],{"align":405},"Unpack tuples",[400,435,436,441],{},[416,437,438],{"align":405},[19,439,440],{},"auto [x, y, z] = struct_obj",[416,442,443],{"align":405},"Unpack struct (in member order)",[400,445,446,451],{},[416,447,448],{"align":405},[19,449,450],{},"for (auto& [k, v] : map)",[416,452,453],{"align":405},"Traversing a map while unpacking key\u002Fvalue pairs",[400,455,456,461],{},[416,457,458],{"align":405},[19,459,460],{},"auto [it, ok] = map.insert(...)",[416,462,463],{"align":405},"Unpack the pair\u003Citerator, bool> returned by insert.",[10,465,467],{"id":466},"example-code","Example code",[469,470,472],"h3",{"id":471},"示例-1函数返回-pair从-c17-前的成员访问到结构化绑定","示例 1：函数返回 pair——从 C++17 前的成员访问到结构化绑定",[61,474,476],{"className":174,"code":475,"language":176,"meta":66,"style":66},"#include \u003Ciostream>\n#include \u003Cutility>  \u002F\u002F for std::pair\n\n\u002F\u002F 返回两个值的函数\nstd::pair\u003Cint, bool> divide(int a, int b)\n{\n    if (b == 0)\n    {\n        return {0, false};  \u002F\u002F 除数为 0，返回失败\n    }\n    return {a \u002F b, true};   \u002F\u002F 返回结果和成功标志\n}\n\nint main()\n{\n    \u002F\u002F C++17 之前：先接收完整的 pair 对象。\n    const std::pair\u003Cint, bool> old_result = divide(10, 2);\n\n    \u002F\u002F pair 的 first 是第一个值，这里代表除法结果。\n    const int old_value = old_result.first;\n\n    \u002F\u002F pair 的 second 是第二个值，这里代表操作是否成功。\n    const bool old_ok = old_result.second;\n\n    if (old_ok)\n    {\n        std::cout \u003C\u003C \"before C++17: 10 \u002F 2 = \" \u003C\u003C old_value \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：结构化绑定把返回的 pair 按顺序拆成 value 和 ok。\n    \u002F\u002F value 对应 pair.first，ok 对应 pair.second。\n    const auto [value, ok] = divide(10, 2);\n    if (ok)\n    {\n        std::cout \u003C\u003C \"C++17: 10 \u002F 2 = \" \u003C\u003C value \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：同样的方法也可以接收失败结果。\n    const auto [failed_value, failed_ok] = divide(10, 0);\n\n    \u002F\u002F failed_ok 为 false，说明 failed_value 不是有效的除法结果。\n    if (!failed_ok)\n    {\n        std::cout \u003C\u003C \"10 \u002F 0: division failed\\n\";\n    }\n\n    return 0;\n}\n",[19,477,478,486,496,500,505,548,554,571,577,599,605,627,633,638,649,654,660,698,703,709,725,730,736,752,757,765,770,804,809,814,820,826,850,858,863,889,894,899,905,929,934,940,954,959,977,982,987,996],{"__ignoreMap":66},[70,479,480,483],{"class":72,"line":73},[70,481,482],{"class":190},"#include",[70,484,485],{"class":80}," \u003Ciostream>\n",[70,487,488,490,493],{"class":72,"line":220},[70,489,482],{"class":190},[70,491,492],{"class":80}," \u003Cutility>",[70,494,495],{"class":230},"  \u002F\u002F for std::pair\n",[70,497,498],{"class":72,"line":227},[70,499,224],{"emptyLinePlaceholder":223},[70,501,502],{"class":72,"line":234},[70,503,504],{"class":230},"\u002F\u002F 返回两个值的函数\n",[70,506,507,509,512,514,517,519,521,523,526,529,532,534,538,540,542,545],{"class":72,"line":248},[70,508,183],{"class":76},[70,510,511],{"class":186},"::",[70,513,321],{"class":76},[70,515,516],{"class":186},"\u003C",[70,518,237],{"class":190},[70,520,194],{"class":186},[70,522,251],{"class":190},[70,524,525],{"class":186},"> ",[70,527,528],{"class":76},"divide",[70,530,531],{"class":186},"(",[70,533,237],{"class":190},[70,535,537],{"class":536},"s4XuR"," a",[70,539,194],{"class":186},[70,541,237],{"class":190},[70,543,544],{"class":536}," b",[70,546,547],{"class":186},")\n",[70,549,551],{"class":72,"line":550},6,[70,552,553],{"class":186},"{\n",[70,555,557,560,563,566,569],{"class":72,"line":556},7,[70,558,559],{"class":190},"    if",[70,561,562],{"class":186}," (b ",[70,564,565],{"class":190},"==",[70,567,568],{"class":84}," 0",[70,570,547],{"class":186},[70,572,574],{"class":72,"line":573},8,[70,575,576],{"class":186},"    {\n",[70,578,580,583,585,588,590,593,596],{"class":72,"line":579},9,[70,581,582],{"class":190},"        return",[70,584,206],{"class":186},[70,586,587],{"class":84},"0",[70,589,194],{"class":186},[70,591,592],{"class":84},"false",[70,594,595],{"class":186},"};",[70,597,598],{"class":230},"  \u002F\u002F 除数为 0，返回失败\n",[70,600,602],{"class":72,"line":601},10,[70,603,604],{"class":186},"    }\n",[70,606,608,611,614,617,620,622,624],{"class":72,"line":607},11,[70,609,610],{"class":190},"    return",[70,612,613],{"class":186}," {a ",[70,615,616],{"class":190},"\u002F",[70,618,619],{"class":186}," b, ",[70,621,214],{"class":84},[70,623,595],{"class":186},[70,625,626],{"class":230},"   \u002F\u002F 返回结果和成功标志\n",[70,628,630],{"class":72,"line":629},12,[70,631,632],{"class":186},"}\n",[70,634,636],{"class":72,"line":635},13,[70,637,224],{"emptyLinePlaceholder":223},[70,639,641,643,646],{"class":72,"line":640},14,[70,642,237],{"class":190},[70,644,645],{"class":76}," main",[70,647,648],{"class":186},"()\n",[70,650,652],{"class":72,"line":651},15,[70,653,553],{"class":186},[70,655,657],{"class":72,"line":656},16,[70,658,659],{"class":230},"    \u002F\u002F C++17 之前：先接收完整的 pair 对象。\n",[70,661,663,666,669,671,673,675,677,680,682,685,687,690,692,695],{"class":72,"line":662},17,[70,664,665],{"class":190},"    const",[70,667,668],{"class":76}," std",[70,670,187],{"class":186},[70,672,191],{"class":190},[70,674,194],{"class":186},[70,676,197],{"class":190},[70,678,679],{"class":186}," old_result ",[70,681,203],{"class":190},[70,683,684],{"class":76}," divide",[70,686,531],{"class":186},[70,688,689],{"class":84},"10",[70,691,194],{"class":186},[70,693,694],{"class":84},"2",[70,696,697],{"class":186},");\n",[70,699,701],{"class":72,"line":700},18,[70,702,224],{"emptyLinePlaceholder":223},[70,704,706],{"class":72,"line":705},19,[70,707,708],{"class":230},"    \u002F\u002F pair 的 first 是第一个值，这里代表除法结果。\n",[70,710,712,714,717,720,722],{"class":72,"line":711},20,[70,713,665],{"class":190},[70,715,716],{"class":190}," int",[70,718,719],{"class":186}," old_value ",[70,721,203],{"class":190},[70,723,724],{"class":186}," old_result.first;\n",[70,726,728],{"class":72,"line":727},21,[70,729,224],{"emptyLinePlaceholder":223},[70,731,733],{"class":72,"line":732},22,[70,734,735],{"class":230},"    \u002F\u002F pair 的 second 是第二个值，这里代表操作是否成功。\n",[70,737,739,741,744,747,749],{"class":72,"line":738},23,[70,740,665],{"class":190},[70,742,743],{"class":190}," bool",[70,745,746],{"class":186}," old_ok ",[70,748,203],{"class":190},[70,750,751],{"class":186}," old_result.second;\n",[70,753,755],{"class":72,"line":754},24,[70,756,224],{"emptyLinePlaceholder":223},[70,758,760,762],{"class":72,"line":759},25,[70,761,559],{"class":190},[70,763,764],{"class":186}," (old_ok)\n",[70,766,768],{"class":72,"line":767},26,[70,769,576],{"class":186},[70,771,773,776,779,782,785,788,790,792,795,798,801],{"class":72,"line":772},27,[70,774,775],{"class":76},"        std",[70,777,778],{"class":186},"::cout ",[70,780,781],{"class":190},"\u003C\u003C",[70,783,784],{"class":80}," \"before C++17: 10 \u002F 2 = \"",[70,786,787],{"class":190}," \u003C\u003C",[70,789,719],{"class":186},[70,791,781],{"class":190},[70,793,794],{"class":80}," \"",[70,796,797],{"class":84},"\\n",[70,799,800],{"class":80},"\"",[70,802,803],{"class":186},";\n",[70,805,807],{"class":72,"line":806},28,[70,808,604],{"class":186},[70,810,812],{"class":72,"line":811},29,[70,813,224],{"emptyLinePlaceholder":223},[70,815,817],{"class":72,"line":816},30,[70,818,819],{"class":230},"    \u002F\u002F C++17：结构化绑定把返回的 pair 按顺序拆成 value 和 ok。\n",[70,821,823],{"class":72,"line":822},31,[70,824,825],{"class":230},"    \u002F\u002F value 对应 pair.first，ok 对应 pair.second。\n",[70,827,829,831,834,836,838,840,842,844,846,848],{"class":72,"line":828},32,[70,830,665],{"class":190},[70,832,833],{"class":190}," auto",[70,835,310],{"class":186},[70,837,203],{"class":190},[70,839,684],{"class":76},[70,841,531],{"class":186},[70,843,689],{"class":84},[70,845,194],{"class":186},[70,847,694],{"class":84},[70,849,697],{"class":186},[70,851,853,855],{"class":72,"line":852},33,[70,854,559],{"class":190},[70,856,857],{"class":186}," (ok)\n",[70,859,861],{"class":72,"line":860},34,[70,862,576],{"class":186},[70,864,866,868,870,872,875,877,879,881,883,885,887],{"class":72,"line":865},35,[70,867,775],{"class":76},[70,869,778],{"class":186},[70,871,781],{"class":190},[70,873,874],{"class":80}," \"C++17: 10 \u002F 2 = \"",[70,876,787],{"class":190},[70,878,240],{"class":186},[70,880,781],{"class":190},[70,882,794],{"class":80},[70,884,797],{"class":84},[70,886,800],{"class":80},[70,888,803],{"class":186},[70,890,892],{"class":72,"line":891},36,[70,893,604],{"class":186},[70,895,897],{"class":72,"line":896},37,[70,898,224],{"emptyLinePlaceholder":223},[70,900,902],{"class":72,"line":901},38,[70,903,904],{"class":230},"    \u002F\u002F C++17：同样的方法也可以接收失败结果。\n",[70,906,908,910,912,915,917,919,921,923,925,927],{"class":72,"line":907},39,[70,909,665],{"class":190},[70,911,833],{"class":190},[70,913,914],{"class":186}," [failed_value, failed_ok] ",[70,916,203],{"class":190},[70,918,684],{"class":76},[70,920,531],{"class":186},[70,922,689],{"class":84},[70,924,194],{"class":186},[70,926,587],{"class":84},[70,928,697],{"class":186},[70,930,932],{"class":72,"line":931},40,[70,933,224],{"emptyLinePlaceholder":223},[70,935,937],{"class":72,"line":936},41,[70,938,939],{"class":230},"    \u002F\u002F failed_ok 为 false，说明 failed_value 不是有效的除法结果。\n",[70,941,943,945,948,951],{"class":72,"line":942},42,[70,944,559],{"class":190},[70,946,947],{"class":186}," (",[70,949,950],{"class":190},"!",[70,952,953],{"class":186},"failed_ok)\n",[70,955,957],{"class":72,"line":956},43,[70,958,576],{"class":186},[70,960,962,964,966,968,971,973,975],{"class":72,"line":961},44,[70,963,775],{"class":76},[70,965,778],{"class":186},[70,967,781],{"class":190},[70,969,970],{"class":80}," \"10 \u002F 0: division failed",[70,972,797],{"class":84},[70,974,800],{"class":80},[70,976,803],{"class":186},[70,978,980],{"class":72,"line":979},45,[70,981,604],{"class":186},[70,983,985],{"class":72,"line":984},46,[70,986,224],{"emptyLinePlaceholder":223},[70,988,990,992,994],{"class":72,"line":989},47,[70,991,610],{"class":190},[70,993,568],{"class":84},[70,995,803],{"class":186},[70,997,999],{"class":72,"line":998},48,[70,1000,632],{"class":186},[15,1002,1003,171],{},[42,1004,1005],{},"Results",[61,1007,1012],{"className":1008,"code":1010,"language":1011},[1009],"language-text","before C++17: 10 \u002F 2 = 5\nC++17: 10 \u002F 2 = 5\n10 \u002F 0: division failed\n","text",[19,1013,1010],{"__ignoreMap":66},[469,1015,1017],{"id":1016},"示例-2tuple-和数组从逐项访问到-c17-结构化绑定","示例 2：tuple 和数组——从逐项访问到 C++17 结构化绑定",[61,1019,1021],{"className":174,"code":1020,"language":176,"meta":66,"style":66},"#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Ctuple>\n\n\u002F\u002F 返回多个值\nstd::tuple\u003Cstd::string, int, double> get_student_info()\n{\n    return {\"Alice\", 20, 3.8};  \u002F\u002F 姓名、年龄、GPA\n}\n\nint main()\n{\n    \u002F\u002F C++17 之前：先保存完整的 tuple。\n    const auto old_info = get_student_info();\n\n    \u002F\u002F std::get\u003C下标>() 按位置访问 tuple，编号从 0 开始。\n    const std::string& old_name = std::get\u003C0>(old_info);\n    const int old_age = std::get\u003C1>(old_info);\n    const double old_gpa = std::get\u003C2>(old_info);\n\n    std::cout \u003C\u003C \"before C++17 tuple: \"\n              \u003C\u003C old_name \u003C\u003C \", \" \u003C\u003C old_age \u003C\u003C \", \" \u003C\u003C old_gpa \u003C\u003C \"\\n\";\n\n    \u002F\u002F C++17：结构化绑定按 tuple 中元素的顺序声明三个变量。\n    \u002F\u002F const auto& 表示只读引用，可以避免复制 tuple 中的 string。\n    const auto& [name, age, gpa] = old_info;\n    std::cout \u003C\u003C \"C++17 tuple: \"\n              \u003C\u003C name \u003C\u003C \", \" \u003C\u003C age \u003C\u003C \", \" \u003C\u003C gpa \u003C\u003C \"\\n\";\n\n    int numbers[] = {10, 20, 30};\n\n    \u002F\u002F C++17 之前：使用下标逐个访问数组元素。\n    std::cout \u003C\u003C \"before C++17 array: \"\n              \u003C\u003C numbers[0] \u003C\u003C \", \" \u003C\u003C numbers[1] \u003C\u003C \", \" \u003C\u003C numbers[2] \u003C\u003C \"\\n\";\n\n    \u002F\u002F C++17：数组有三个元素，所以左侧也必须声明三个名字。\n    \u002F\u002F 这里没有写 &，因此 a、b、c 是三个元素的副本。\n    const auto [a, b, c] = numbers;\n    std::cout \u003C\u003C \"C++17 array: \" \u003C\u003C a \u003C\u003C \", \" \u003C\u003C b \u003C\u003C \", \" \u003C\u003C c \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[19,1022,1023,1029,1036,1043,1047,1052,1085,1089,1113,1117,1121,1129,1133,1138,1155,1159,1164,1195,1219,1243,1247,1259,1293,1297,1302,1307,1321,1332,1367,1371,1396,1400,1405,1416,1462,1466,1471,1476,1490,1534,1538,1546],{"__ignoreMap":66},[70,1024,1025,1027],{"class":72,"line":73},[70,1026,482],{"class":190},[70,1028,485],{"class":80},[70,1030,1031,1033],{"class":72,"line":220},[70,1032,482],{"class":190},[70,1034,1035],{"class":80}," \u003Cstring>\n",[70,1037,1038,1040],{"class":72,"line":227},[70,1039,482],{"class":190},[70,1041,1042],{"class":80}," \u003Ctuple>\n",[70,1044,1045],{"class":72,"line":234},[70,1046,224],{"emptyLinePlaceholder":223},[70,1048,1049],{"class":72,"line":248},[70,1050,1051],{"class":230},"\u002F\u002F 返回多个值\n",[70,1053,1054,1056,1058,1060,1062,1064,1066,1069,1071,1073,1075,1078,1080,1083],{"class":72,"line":550},[70,1055,183],{"class":76},[70,1057,511],{"class":186},[70,1059,324],{"class":76},[70,1061,516],{"class":186},[70,1063,183],{"class":76},[70,1065,511],{"class":186},[70,1067,1068],{"class":76},"string",[70,1070,194],{"class":186},[70,1072,237],{"class":190},[70,1074,194],{"class":186},[70,1076,1077],{"class":190},"double",[70,1079,525],{"class":186},[70,1081,1082],{"class":76},"get_student_info",[70,1084,648],{"class":186},[70,1086,1087],{"class":72,"line":556},[70,1088,553],{"class":186},[70,1090,1091,1093,1095,1098,1100,1103,1105,1108,1110],{"class":72,"line":573},[70,1092,610],{"class":190},[70,1094,206],{"class":186},[70,1096,1097],{"class":80},"\"Alice\"",[70,1099,194],{"class":186},[70,1101,1102],{"class":84},"20",[70,1104,194],{"class":186},[70,1106,1107],{"class":84},"3.8",[70,1109,595],{"class":186},[70,1111,1112],{"class":230},"  \u002F\u002F 姓名、年龄、GPA\n",[70,1114,1115],{"class":72,"line":579},[70,1116,632],{"class":186},[70,1118,1119],{"class":72,"line":601},[70,1120,224],{"emptyLinePlaceholder":223},[70,1122,1123,1125,1127],{"class":72,"line":607},[70,1124,237],{"class":190},[70,1126,645],{"class":76},[70,1128,648],{"class":186},[70,1130,1131],{"class":72,"line":629},[70,1132,553],{"class":186},[70,1134,1135],{"class":72,"line":635},[70,1136,1137],{"class":230},"    \u002F\u002F C++17 之前：先保存完整的 tuple。\n",[70,1139,1140,1142,1144,1147,1149,1152],{"class":72,"line":640},[70,1141,665],{"class":190},[70,1143,833],{"class":190},[70,1145,1146],{"class":186}," old_info ",[70,1148,203],{"class":190},[70,1150,1151],{"class":76}," get_student_info",[70,1153,1154],{"class":186},"();\n",[70,1156,1157],{"class":72,"line":651},[70,1158,224],{"emptyLinePlaceholder":223},[70,1160,1161],{"class":72,"line":656},[70,1162,1163],{"class":230},"    \u002F\u002F std::get\u003C下标>() 按位置访问 tuple，编号从 0 开始。\n",[70,1165,1166,1168,1170,1173,1176,1179,1181,1183,1185,1188,1190,1192],{"class":72,"line":662},[70,1167,665],{"class":190},[70,1169,668],{"class":76},[70,1171,1172],{"class":186},"::string",[70,1174,1175],{"class":190},"&",[70,1177,1178],{"class":186}," old_name ",[70,1180,203],{"class":190},[70,1182,668],{"class":76},[70,1184,511],{"class":186},[70,1186,1187],{"class":76},"get",[70,1189,516],{"class":186},[70,1191,587],{"class":84},[70,1193,1194],{"class":186},">(old_info);\n",[70,1196,1197,1199,1201,1204,1206,1208,1210,1212,1214,1217],{"class":72,"line":700},[70,1198,665],{"class":190},[70,1200,716],{"class":190},[70,1202,1203],{"class":186}," old_age ",[70,1205,203],{"class":190},[70,1207,668],{"class":76},[70,1209,511],{"class":186},[70,1211,1187],{"class":76},[70,1213,516],{"class":186},[70,1215,1216],{"class":84},"1",[70,1218,1194],{"class":186},[70,1220,1221,1223,1226,1229,1231,1233,1235,1237,1239,1241],{"class":72,"line":705},[70,1222,665],{"class":190},[70,1224,1225],{"class":190}," double",[70,1227,1228],{"class":186}," old_gpa ",[70,1230,203],{"class":190},[70,1232,668],{"class":76},[70,1234,511],{"class":186},[70,1236,1187],{"class":76},[70,1238,516],{"class":186},[70,1240,694],{"class":84},[70,1242,1194],{"class":186},[70,1244,1245],{"class":72,"line":711},[70,1246,224],{"emptyLinePlaceholder":223},[70,1248,1249,1252,1254,1256],{"class":72,"line":727},[70,1250,1251],{"class":76},"    std",[70,1253,778],{"class":186},[70,1255,781],{"class":190},[70,1257,1258],{"class":80}," \"before C++17 tuple: \"\n",[70,1260,1261,1264,1266,1268,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291],{"class":72,"line":732},[70,1262,1263],{"class":190},"              \u003C\u003C",[70,1265,1178],{"class":186},[70,1267,781],{"class":190},[70,1269,1270],{"class":80}," \", \"",[70,1272,787],{"class":190},[70,1274,1203],{"class":186},[70,1276,781],{"class":190},[70,1278,1270],{"class":80},[70,1280,787],{"class":190},[70,1282,1228],{"class":186},[70,1284,781],{"class":190},[70,1286,794],{"class":80},[70,1288,797],{"class":84},[70,1290,800],{"class":80},[70,1292,803],{"class":186},[70,1294,1295],{"class":72,"line":738},[70,1296,224],{"emptyLinePlaceholder":223},[70,1298,1299],{"class":72,"line":754},[70,1300,1301],{"class":230},"    \u002F\u002F C++17：结构化绑定按 tuple 中元素的顺序声明三个变量。\n",[70,1303,1304],{"class":72,"line":759},[70,1305,1306],{"class":230},"    \u002F\u002F const auto& 表示只读引用，可以避免复制 tuple 中的 string。\n",[70,1308,1309,1311,1313,1316,1318],{"class":72,"line":767},[70,1310,665],{"class":190},[70,1312,376],{"class":190},[70,1314,1315],{"class":186}," [name, age, gpa] ",[70,1317,203],{"class":190},[70,1319,1320],{"class":186}," old_info;\n",[70,1322,1323,1325,1327,1329],{"class":72,"line":772},[70,1324,1251],{"class":76},[70,1326,778],{"class":186},[70,1328,781],{"class":190},[70,1330,1331],{"class":80}," \"C++17 tuple: \"\n",[70,1333,1334,1336,1339,1341,1343,1345,1348,1350,1352,1354,1357,1359,1361,1363,1365],{"class":72,"line":806},[70,1335,1263],{"class":190},[70,1337,1338],{"class":186}," name ",[70,1340,781],{"class":190},[70,1342,1270],{"class":80},[70,1344,787],{"class":190},[70,1346,1347],{"class":186}," age ",[70,1349,781],{"class":190},[70,1351,1270],{"class":80},[70,1353,787],{"class":190},[70,1355,1356],{"class":186}," gpa ",[70,1358,781],{"class":190},[70,1360,794],{"class":80},[70,1362,797],{"class":84},[70,1364,800],{"class":80},[70,1366,803],{"class":186},[70,1368,1369],{"class":72,"line":811},[70,1370,224],{"emptyLinePlaceholder":223},[70,1372,1373,1376,1379,1381,1383,1385,1387,1389,1391,1394],{"class":72,"line":816},[70,1374,1375],{"class":190},"    int",[70,1377,1378],{"class":186}," numbers[] ",[70,1380,203],{"class":190},[70,1382,206],{"class":186},[70,1384,689],{"class":84},[70,1386,194],{"class":186},[70,1388,1102],{"class":84},[70,1390,194],{"class":186},[70,1392,1393],{"class":84},"30",[70,1395,217],{"class":186},[70,1397,1398],{"class":72,"line":822},[70,1399,224],{"emptyLinePlaceholder":223},[70,1401,1402],{"class":72,"line":828},[70,1403,1404],{"class":230},"    \u002F\u002F C++17 之前：使用下标逐个访问数组元素。\n",[70,1406,1407,1409,1411,1413],{"class":72,"line":852},[70,1408,1251],{"class":76},[70,1410,778],{"class":186},[70,1412,781],{"class":190},[70,1414,1415],{"class":80}," \"before C++17 array: \"\n",[70,1417,1418,1420,1423,1425,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460],{"class":72,"line":860},[70,1419,1263],{"class":190},[70,1421,1422],{"class":186}," numbers[",[70,1424,587],{"class":84},[70,1426,1427],{"class":186},"] ",[70,1429,781],{"class":190},[70,1431,1270],{"class":80},[70,1433,787],{"class":190},[70,1435,1422],{"class":186},[70,1437,1216],{"class":84},[70,1439,1427],{"class":186},[70,1441,781],{"class":190},[70,1443,1270],{"class":80},[70,1445,787],{"class":190},[70,1447,1422],{"class":186},[70,1449,694],{"class":84},[70,1451,1427],{"class":186},[70,1453,781],{"class":190},[70,1455,794],{"class":80},[70,1457,797],{"class":84},[70,1459,800],{"class":80},[70,1461,803],{"class":186},[70,1463,1464],{"class":72,"line":865},[70,1465,224],{"emptyLinePlaceholder":223},[70,1467,1468],{"class":72,"line":891},[70,1469,1470],{"class":230},"    \u002F\u002F C++17：数组有三个元素，所以左侧也必须声明三个名字。\n",[70,1472,1473],{"class":72,"line":896},[70,1474,1475],{"class":230},"    \u002F\u002F 这里没有写 &，因此 a、b、c 是三个元素的副本。\n",[70,1477,1478,1480,1482,1485,1487],{"class":72,"line":901},[70,1479,665],{"class":190},[70,1481,833],{"class":190},[70,1483,1484],{"class":186}," [a, b, c] ",[70,1486,203],{"class":190},[70,1488,1489],{"class":186}," numbers;\n",[70,1491,1492,1494,1496,1498,1501,1503,1506,1508,1510,1512,1515,1517,1519,1521,1524,1526,1528,1530,1532],{"class":72,"line":907},[70,1493,1251],{"class":76},[70,1495,778],{"class":186},[70,1497,781],{"class":190},[70,1499,1500],{"class":80}," \"C++17 array: \"",[70,1502,787],{"class":190},[70,1504,1505],{"class":186}," a ",[70,1507,781],{"class":190},[70,1509,1270],{"class":80},[70,1511,787],{"class":190},[70,1513,1514],{"class":186}," b ",[70,1516,781],{"class":190},[70,1518,1270],{"class":80},[70,1520,787],{"class":190},[70,1522,1523],{"class":186}," c ",[70,1525,781],{"class":190},[70,1527,794],{"class":80},[70,1529,797],{"class":84},[70,1531,800],{"class":80},[70,1533,803],{"class":186},[70,1535,1536],{"class":72,"line":931},[70,1537,224],{"emptyLinePlaceholder":223},[70,1539,1540,1542,1544],{"class":72,"line":936},[70,1541,610],{"class":190},[70,1543,568],{"class":84},[70,1545,803],{"class":186},[70,1547,1548],{"class":72,"line":942},[70,1549,632],{"class":186},[15,1551,1552,171],{},[42,1553,1005],{},[61,1555,1558],{"className":1556,"code":1557,"language":1011},[1009],"before C++17 tuple: Alice, 20, 3.8\nC++17 tuple: Alice, 20, 3.8\nbefore C++17 array: 10, 20, 30\nC++17 array: 10, 20, 30\n",[19,1559,1557],{"__ignoreMap":66},[469,1561,1563],{"id":1562},"示例-3结构体从成员访问到-c17-结构化绑定","示例 3：结构体——从成员访问到 C++17 结构化绑定",[61,1565,1567],{"className":174,"code":1566,"language":176,"meta":66,"style":66},"#include \u003Ciostream>\n#include \u003Cstring>\n\nstruct Point\n{\n    double x;\n    double y;\n    double z;\n};\n\nPoint midpoint(const Point& p1, const Point& p2)\n{\n    return {\n        (p1.x + p2.x) \u002F 2.0,\n        (p1.y + p2.y) \u002F 2.0,\n        (p1.z + p2.z) \u002F 2.0\n    };\n}\n\nint main()\n{\n    Point p1{1.0, 2.0, 3.0};\n    Point p2{5.0, 6.0, 7.0};\n\n    \u002F\u002F C++17 之前：先接收完整的结构体，再通过成员名访问数据。\n    const Point old_middle = midpoint(p1, p2);\n    std::cout \u003C\u003C \"before C++17 midpoint: (\"\n              \u003C\u003C old_middle.x \u003C\u003C \", \"\n              \u003C\u003C old_middle.y \u003C\u003C \", \"\n              \u003C\u003C old_middle.z \u003C\u003C \")\\n\";\n\n    \u002F\u002F C++17：结构化绑定按成员的声明顺序解包结构体。\n    \u002F\u002F x 对应 Point::x，y 对应 Point::y，z 对应 Point::z。\n    const auto [x, y, z] = midpoint(p1, p2);\n    std::cout \u003C\u003C \"C++17 midpoint: (\" \u003C\u003C x \u003C\u003C \", \" \u003C\u003C y \u003C\u003C \", \" \u003C\u003C z \u003C\u003C \")\\n\";\n\n    \u002F\u002F C++17：也可以直接解包临时创建的结构体对象。\n    const auto [a, b, c] = Point{10.0, 20.0, 30.0};\n    std::cout \u003C\u003C \"C++17 temporary point: (\"\n              \u003C\u003C a \u003C\u003C \", \" \u003C\u003C b \u003C\u003C \", \" \u003C\u003C c \u003C\u003C \")\\n\";\n\n    return 0;\n}\n",[19,1568,1569,1575,1581,1585,1593,1597,1605,1612,1619,1623,1627,1660,1664,1671,1690,1706,1721,1726,1730,1734,1742,1746,1766,1786,1790,1795,1809,1820,1832,1843,1861,1865,1870,1875,1890,1934,1938,1943,1971,1982,2014,2018,2026],{"__ignoreMap":66},[70,1570,1571,1573],{"class":72,"line":73},[70,1572,482],{"class":190},[70,1574,485],{"class":80},[70,1576,1577,1579],{"class":72,"line":220},[70,1578,482],{"class":190},[70,1580,1035],{"class":80},[70,1582,1583],{"class":72,"line":227},[70,1584,224],{"emptyLinePlaceholder":223},[70,1586,1587,1590],{"class":72,"line":234},[70,1588,1589],{"class":190},"struct",[70,1591,1592],{"class":76}," Point\n",[70,1594,1595],{"class":72,"line":248},[70,1596,553],{"class":186},[70,1598,1599,1602],{"class":72,"line":550},[70,1600,1601],{"class":190},"    double",[70,1603,1604],{"class":186}," x;\n",[70,1606,1607,1609],{"class":72,"line":556},[70,1608,1601],{"class":190},[70,1610,1611],{"class":186}," y;\n",[70,1613,1614,1616],{"class":72,"line":573},[70,1615,1601],{"class":190},[70,1617,1618],{"class":186}," z;\n",[70,1620,1621],{"class":72,"line":579},[70,1622,217],{"class":186},[70,1624,1625],{"class":72,"line":601},[70,1626,224],{"emptyLinePlaceholder":223},[70,1628,1629,1632,1635,1637,1639,1642,1644,1647,1649,1651,1653,1655,1658],{"class":72,"line":607},[70,1630,1631],{"class":76},"Point",[70,1633,1634],{"class":76}," midpoint",[70,1636,531],{"class":186},[70,1638,373],{"class":190},[70,1640,1641],{"class":76}," Point",[70,1643,1175],{"class":190},[70,1645,1646],{"class":536}," p1",[70,1648,194],{"class":186},[70,1650,373],{"class":190},[70,1652,1641],{"class":76},[70,1654,1175],{"class":190},[70,1656,1657],{"class":536}," p2",[70,1659,547],{"class":186},[70,1661,1662],{"class":72,"line":629},[70,1663,553],{"class":186},[70,1665,1666,1668],{"class":72,"line":635},[70,1667,610],{"class":190},[70,1669,1670],{"class":186}," {\n",[70,1672,1673,1676,1679,1682,1684,1687],{"class":72,"line":640},[70,1674,1675],{"class":186},"        (p1.x ",[70,1677,1678],{"class":190},"+",[70,1680,1681],{"class":186}," p2.x) ",[70,1683,616],{"class":190},[70,1685,1686],{"class":84}," 2.0",[70,1688,1689],{"class":186},",\n",[70,1691,1692,1695,1697,1700,1702,1704],{"class":72,"line":651},[70,1693,1694],{"class":186},"        (p1.y ",[70,1696,1678],{"class":190},[70,1698,1699],{"class":186}," p2.y) ",[70,1701,616],{"class":190},[70,1703,1686],{"class":84},[70,1705,1689],{"class":186},[70,1707,1708,1711,1713,1716,1718],{"class":72,"line":656},[70,1709,1710],{"class":186},"        (p1.z ",[70,1712,1678],{"class":190},[70,1714,1715],{"class":186}," p2.z) ",[70,1717,616],{"class":190},[70,1719,1720],{"class":84}," 2.0\n",[70,1722,1723],{"class":72,"line":662},[70,1724,1725],{"class":186},"    };\n",[70,1727,1728],{"class":72,"line":700},[70,1729,632],{"class":186},[70,1731,1732],{"class":72,"line":705},[70,1733,224],{"emptyLinePlaceholder":223},[70,1735,1736,1738,1740],{"class":72,"line":711},[70,1737,237],{"class":190},[70,1739,645],{"class":76},[70,1741,648],{"class":186},[70,1743,1744],{"class":72,"line":727},[70,1745,553],{"class":186},[70,1747,1748,1751,1754,1756,1759,1761,1764],{"class":72,"line":732},[70,1749,1750],{"class":186},"    Point p1{",[70,1752,1753],{"class":84},"1.0",[70,1755,194],{"class":186},[70,1757,1758],{"class":84},"2.0",[70,1760,194],{"class":186},[70,1762,1763],{"class":84},"3.0",[70,1765,217],{"class":186},[70,1767,1768,1771,1774,1776,1779,1781,1784],{"class":72,"line":738},[70,1769,1770],{"class":186},"    Point p2{",[70,1772,1773],{"class":84},"5.0",[70,1775,194],{"class":186},[70,1777,1778],{"class":84},"6.0",[70,1780,194],{"class":186},[70,1782,1783],{"class":84},"7.0",[70,1785,217],{"class":186},[70,1787,1788],{"class":72,"line":754},[70,1789,224],{"emptyLinePlaceholder":223},[70,1791,1792],{"class":72,"line":759},[70,1793,1794],{"class":230},"    \u002F\u002F C++17 之前：先接收完整的结构体，再通过成员名访问数据。\n",[70,1796,1797,1799,1802,1804,1806],{"class":72,"line":767},[70,1798,665],{"class":190},[70,1800,1801],{"class":186}," Point old_middle ",[70,1803,203],{"class":190},[70,1805,1634],{"class":76},[70,1807,1808],{"class":186},"(p1, p2);\n",[70,1810,1811,1813,1815,1817],{"class":72,"line":772},[70,1812,1251],{"class":76},[70,1814,778],{"class":186},[70,1816,781],{"class":190},[70,1818,1819],{"class":80}," \"before C++17 midpoint: (\"\n",[70,1821,1822,1824,1827,1829],{"class":72,"line":806},[70,1823,1263],{"class":190},[70,1825,1826],{"class":186}," old_middle.x ",[70,1828,781],{"class":190},[70,1830,1831],{"class":80}," \", \"\n",[70,1833,1834,1836,1839,1841],{"class":72,"line":811},[70,1835,1263],{"class":190},[70,1837,1838],{"class":186}," old_middle.y ",[70,1840,781],{"class":190},[70,1842,1831],{"class":80},[70,1844,1845,1847,1850,1852,1855,1857,1859],{"class":72,"line":816},[70,1846,1263],{"class":190},[70,1848,1849],{"class":186}," old_middle.z ",[70,1851,781],{"class":190},[70,1853,1854],{"class":80}," \")",[70,1856,797],{"class":84},[70,1858,800],{"class":80},[70,1860,803],{"class":186},[70,1862,1863],{"class":72,"line":822},[70,1864,224],{"emptyLinePlaceholder":223},[70,1866,1867],{"class":72,"line":828},[70,1868,1869],{"class":230},"    \u002F\u002F C++17：结构化绑定按成员的声明顺序解包结构体。\n",[70,1871,1872],{"class":72,"line":852},[70,1873,1874],{"class":230},"    \u002F\u002F x 对应 Point::x，y 对应 Point::y，z 对应 Point::z。\n",[70,1876,1877,1879,1881,1884,1886,1888],{"class":72,"line":860},[70,1878,665],{"class":190},[70,1880,833],{"class":190},[70,1882,1883],{"class":186}," [x, y, z] ",[70,1885,203],{"class":190},[70,1887,1634],{"class":76},[70,1889,1808],{"class":186},[70,1891,1892,1894,1896,1898,1901,1903,1906,1908,1910,1912,1915,1917,1919,1921,1924,1926,1928,1930,1932],{"class":72,"line":865},[70,1893,1251],{"class":76},[70,1895,778],{"class":186},[70,1897,781],{"class":190},[70,1899,1900],{"class":80}," \"C++17 midpoint: (\"",[70,1902,787],{"class":190},[70,1904,1905],{"class":186}," x ",[70,1907,781],{"class":190},[70,1909,1270],{"class":80},[70,1911,787],{"class":190},[70,1913,1914],{"class":186}," y ",[70,1916,781],{"class":190},[70,1918,1270],{"class":80},[70,1920,787],{"class":190},[70,1922,1923],{"class":186}," z ",[70,1925,781],{"class":190},[70,1927,1854],{"class":80},[70,1929,797],{"class":84},[70,1931,800],{"class":80},[70,1933,803],{"class":186},[70,1935,1936],{"class":72,"line":891},[70,1937,224],{"emptyLinePlaceholder":223},[70,1939,1940],{"class":72,"line":896},[70,1941,1942],{"class":230},"    \u002F\u002F C++17：也可以直接解包临时创建的结构体对象。\n",[70,1944,1945,1947,1949,1951,1953,1956,1959,1961,1964,1966,1969],{"class":72,"line":901},[70,1946,665],{"class":190},[70,1948,833],{"class":190},[70,1950,1484],{"class":186},[70,1952,203],{"class":190},[70,1954,1955],{"class":186}," Point{",[70,1957,1958],{"class":84},"10.0",[70,1960,194],{"class":186},[70,1962,1963],{"class":84},"20.0",[70,1965,194],{"class":186},[70,1967,1968],{"class":84},"30.0",[70,1970,217],{"class":186},[70,1972,1973,1975,1977,1979],{"class":72,"line":907},[70,1974,1251],{"class":76},[70,1976,778],{"class":186},[70,1978,781],{"class":190},[70,1980,1981],{"class":80}," \"C++17 temporary point: (\"\n",[70,1983,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012],{"class":72,"line":931},[70,1985,1263],{"class":190},[70,1987,1505],{"class":186},[70,1989,781],{"class":190},[70,1991,1270],{"class":80},[70,1993,787],{"class":190},[70,1995,1514],{"class":186},[70,1997,781],{"class":190},[70,1999,1270],{"class":80},[70,2001,787],{"class":190},[70,2003,1523],{"class":186},[70,2005,781],{"class":190},[70,2007,1854],{"class":80},[70,2009,797],{"class":84},[70,2011,800],{"class":80},[70,2013,803],{"class":186},[70,2015,2016],{"class":72,"line":936},[70,2017,224],{"emptyLinePlaceholder":223},[70,2019,2020,2022,2024],{"class":72,"line":942},[70,2021,610],{"class":190},[70,2023,568],{"class":84},[70,2025,803],{"class":186},[70,2027,2028],{"class":72,"line":956},[70,2029,632],{"class":186},[15,2031,2032,171],{},[42,2033,1005],{},[61,2035,2038],{"className":2036,"code":2037,"language":1011},[1009],"before C++17 midpoint: (3, 4, 5)\nC++17 midpoint: (3, 4, 5)\nC++17 temporary point: (10, 20, 30)\n",[19,2039,2037],{"__ignoreMap":66},[469,2041,2043],{"id":2042},"示例-4map对比-c17-前后的插入结果和遍历写法","示例 4：map——对比 C++17 前后的插入结果和遍历写法",[61,2045,2047],{"className":174,"code":2046,"language":176,"meta":66,"style":66},"#include \u003Ciostream>\n#include \u003Cmap>\n#include \u003Cstring>\n\nint main()\n{\n    std::map\u003Cstd::string, int> scores;\n\n    \u002F\u002F map::insert 返回一个 pair\u003Citerator, bool>：\n    \u002F\u002F first 是指向相应元素的迭代器，second 表示是否插入成功。\n\n    \u002F\u002F C++17 之前：先接收完整的 pair，再分别读取 first 和 second。\n    const auto old_insert_result = scores.insert({\"Alice\", 85});\n    const auto old_it = old_insert_result.first;\n    const bool old_inserted = old_insert_result.second;\n\n    if (old_inserted)\n    {\n        \u002F\u002F 迭代器的 second 是 map 元素的 value，这里是 Alice 的分数。\n        std::cout \u003C\u003C \"before C++17 insert: Alice inserted, score: \"\n                  \u003C\u003C old_it->second \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：直接把 insert 返回的 pair 解包为迭代器和成功标志。\n    \u002F\u002F 由于 Alice 已经存在，这次重复插入会失败。\n    const auto [it, inserted] = scores.insert({\"Alice\", 100});\n    if (!inserted)\n    {\n        std::cout \u003C\u003C \"C++17 insert: Alice already exists, score: \"\n                  \u003C\u003C it->second \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F 添加另外两个元素，供下面演示遍历使用。\n    scores.insert({\"Bob\", 92});\n    scores.insert({\"Charlie\", 78});\n\n    \u002F\u002F C++17 之前：范围 for 每次取得一个 pair。\n    \u002F\u002F pair.first 是 map 的 key，pair.second 是 map 的 value。\n    std::cout \u003C\u003C \"\\nbefore C++17 traversal:\\n\";\n    for (const auto& pair : scores)\n    {\n        std::cout \u003C\u003C \"  \" \u003C\u003C pair.first \u003C\u003C \": \" \u003C\u003C pair.second \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：在范围 for 中使用结构化绑定，直接命名 key 和 value。\n    \u002F\u002F const auto& 表示只读引用，既不复制元素，也不会修改 map。\n    std::cout \u003C\u003C \"C++17 traversal:\\n\";\n    for (const auto& [name, score] : scores)\n    {\n        std::cout \u003C\u003C \"  \" \u003C\u003C name \u003C\u003C \": \" \u003C\u003C score \u003C\u003C \"\\n\";\n    }\n\n    return 0;\n}\n",[19,2048,2049,2055,2062,2068,2072,2080,2084,2104,2108,2113,2118,2122,2127,2157,2171,2185,2189,2196,2200,2205,2216,2234,2238,2242,2247,2252,2278,2289,2293,2304,2321,2325,2329,2334,2353,2371,2375,2380,2385,2406,2420,2424,2460,2464,2468,2473,2478,2495,2508,2513,2547,2552,2557,2566],{"__ignoreMap":66},[70,2050,2051,2053],{"class":72,"line":73},[70,2052,482],{"class":190},[70,2054,485],{"class":80},[70,2056,2057,2059],{"class":72,"line":220},[70,2058,482],{"class":190},[70,2060,2061],{"class":80}," \u003Cmap>\n",[70,2063,2064,2066],{"class":72,"line":227},[70,2065,482],{"class":190},[70,2067,1035],{"class":80},[70,2069,2070],{"class":72,"line":234},[70,2071,224],{"emptyLinePlaceholder":223},[70,2073,2074,2076,2078],{"class":72,"line":248},[70,2075,237],{"class":190},[70,2077,645],{"class":76},[70,2079,648],{"class":186},[70,2081,2082],{"class":72,"line":550},[70,2083,553],{"class":186},[70,2085,2086,2088,2091,2093,2095,2098,2101],{"class":72,"line":556},[70,2087,1251],{"class":76},[70,2089,2090],{"class":186},"::map",[70,2092,516],{"class":190},[70,2094,183],{"class":76},[70,2096,2097],{"class":186},"::string, ",[70,2099,2100],{"class":190},"int>",[70,2102,2103],{"class":186}," scores;\n",[70,2105,2106],{"class":72,"line":573},[70,2107,224],{"emptyLinePlaceholder":223},[70,2109,2110],{"class":72,"line":579},[70,2111,2112],{"class":230},"    \u002F\u002F map::insert 返回一个 pair\u003Citerator, bool>：\n",[70,2114,2115],{"class":72,"line":601},[70,2116,2117],{"class":230},"    \u002F\u002F first 是指向相应元素的迭代器，second 表示是否插入成功。\n",[70,2119,2120],{"class":72,"line":607},[70,2121,224],{"emptyLinePlaceholder":223},[70,2123,2124],{"class":72,"line":629},[70,2125,2126],{"class":230},"    \u002F\u002F C++17 之前：先接收完整的 pair，再分别读取 first 和 second。\n",[70,2128,2129,2131,2133,2136,2138,2141,2144,2147,2149,2151,2154],{"class":72,"line":635},[70,2130,665],{"class":190},[70,2132,833],{"class":190},[70,2134,2135],{"class":186}," old_insert_result ",[70,2137,203],{"class":190},[70,2139,2140],{"class":186}," scores.",[70,2142,2143],{"class":76},"insert",[70,2145,2146],{"class":186},"({",[70,2148,1097],{"class":80},[70,2150,194],{"class":186},[70,2152,2153],{"class":84},"85",[70,2155,2156],{"class":186},"});\n",[70,2158,2159,2161,2163,2166,2168],{"class":72,"line":640},[70,2160,665],{"class":190},[70,2162,833],{"class":190},[70,2164,2165],{"class":186}," old_it ",[70,2167,203],{"class":190},[70,2169,2170],{"class":186}," old_insert_result.first;\n",[70,2172,2173,2175,2177,2180,2182],{"class":72,"line":651},[70,2174,665],{"class":190},[70,2176,743],{"class":190},[70,2178,2179],{"class":186}," old_inserted ",[70,2181,203],{"class":190},[70,2183,2184],{"class":186}," old_insert_result.second;\n",[70,2186,2187],{"class":72,"line":656},[70,2188,224],{"emptyLinePlaceholder":223},[70,2190,2191,2193],{"class":72,"line":662},[70,2192,559],{"class":190},[70,2194,2195],{"class":186}," (old_inserted)\n",[70,2197,2198],{"class":72,"line":700},[70,2199,576],{"class":186},[70,2201,2202],{"class":72,"line":705},[70,2203,2204],{"class":230},"        \u002F\u002F 迭代器的 second 是 map 元素的 value，这里是 Alice 的分数。\n",[70,2206,2207,2209,2211,2213],{"class":72,"line":711},[70,2208,775],{"class":76},[70,2210,778],{"class":186},[70,2212,781],{"class":190},[70,2214,2215],{"class":80}," \"before C++17 insert: Alice inserted, score: \"\n",[70,2217,2218,2221,2224,2226,2228,2230,2232],{"class":72,"line":727},[70,2219,2220],{"class":190},"                  \u003C\u003C",[70,2222,2223],{"class":186}," old_it->second ",[70,2225,781],{"class":190},[70,2227,794],{"class":80},[70,2229,797],{"class":84},[70,2231,800],{"class":80},[70,2233,803],{"class":186},[70,2235,2236],{"class":72,"line":732},[70,2237,604],{"class":186},[70,2239,2240],{"class":72,"line":738},[70,2241,224],{"emptyLinePlaceholder":223},[70,2243,2244],{"class":72,"line":754},[70,2245,2246],{"class":230},"    \u002F\u002F C++17：直接把 insert 返回的 pair 解包为迭代器和成功标志。\n",[70,2248,2249],{"class":72,"line":759},[70,2250,2251],{"class":230},"    \u002F\u002F 由于 Alice 已经存在，这次重复插入会失败。\n",[70,2253,2254,2256,2258,2261,2263,2265,2267,2269,2271,2273,2276],{"class":72,"line":767},[70,2255,665],{"class":190},[70,2257,833],{"class":190},[70,2259,2260],{"class":186}," [it, inserted] ",[70,2262,203],{"class":190},[70,2264,2140],{"class":186},[70,2266,2143],{"class":76},[70,2268,2146],{"class":186},[70,2270,1097],{"class":80},[70,2272,194],{"class":186},[70,2274,2275],{"class":84},"100",[70,2277,2156],{"class":186},[70,2279,2280,2282,2284,2286],{"class":72,"line":772},[70,2281,559],{"class":190},[70,2283,947],{"class":186},[70,2285,950],{"class":190},[70,2287,2288],{"class":186},"inserted)\n",[70,2290,2291],{"class":72,"line":806},[70,2292,576],{"class":186},[70,2294,2295,2297,2299,2301],{"class":72,"line":811},[70,2296,775],{"class":76},[70,2298,778],{"class":186},[70,2300,781],{"class":190},[70,2302,2303],{"class":80}," \"C++17 insert: Alice already exists, score: \"\n",[70,2305,2306,2308,2311,2313,2315,2317,2319],{"class":72,"line":816},[70,2307,2220],{"class":190},[70,2309,2310],{"class":186}," it->second ",[70,2312,781],{"class":190},[70,2314,794],{"class":80},[70,2316,797],{"class":84},[70,2318,800],{"class":80},[70,2320,803],{"class":186},[70,2322,2323],{"class":72,"line":822},[70,2324,604],{"class":186},[70,2326,2327],{"class":72,"line":828},[70,2328,224],{"emptyLinePlaceholder":223},[70,2330,2331],{"class":72,"line":852},[70,2332,2333],{"class":230},"    \u002F\u002F 添加另外两个元素，供下面演示遍历使用。\n",[70,2335,2336,2339,2341,2343,2346,2348,2351],{"class":72,"line":860},[70,2337,2338],{"class":186},"    scores.",[70,2340,2143],{"class":76},[70,2342,2146],{"class":186},[70,2344,2345],{"class":80},"\"Bob\"",[70,2347,194],{"class":186},[70,2349,2350],{"class":84},"92",[70,2352,2156],{"class":186},[70,2354,2355,2357,2359,2361,2364,2366,2369],{"class":72,"line":865},[70,2356,2338],{"class":186},[70,2358,2143],{"class":76},[70,2360,2146],{"class":186},[70,2362,2363],{"class":80},"\"Charlie\"",[70,2365,194],{"class":186},[70,2367,2368],{"class":84},"78",[70,2370,2156],{"class":186},[70,2372,2373],{"class":72,"line":891},[70,2374,224],{"emptyLinePlaceholder":223},[70,2376,2377],{"class":72,"line":896},[70,2378,2379],{"class":230},"    \u002F\u002F C++17 之前：范围 for 每次取得一个 pair。\n",[70,2381,2382],{"class":72,"line":901},[70,2383,2384],{"class":230},"    \u002F\u002F pair.first 是 map 的 key，pair.second 是 map 的 value。\n",[70,2386,2387,2389,2391,2393,2395,2397,2400,2402,2404],{"class":72,"line":907},[70,2388,1251],{"class":76},[70,2390,778],{"class":186},[70,2392,781],{"class":190},[70,2394,794],{"class":80},[70,2396,797],{"class":84},[70,2398,2399],{"class":80},"before C++17 traversal:",[70,2401,797],{"class":84},[70,2403,800],{"class":80},[70,2405,803],{"class":186},[70,2407,2408,2411,2413,2415,2417],{"class":72,"line":931},[70,2409,2410],{"class":190},"    for",[70,2412,947],{"class":186},[70,2414,373],{"class":190},[70,2416,376],{"class":190},[70,2418,2419],{"class":186}," pair : scores)\n",[70,2421,2422],{"class":72,"line":936},[70,2423,576],{"class":186},[70,2425,2426,2428,2430,2432,2435,2437,2440,2442,2445,2447,2450,2452,2454,2456,2458],{"class":72,"line":942},[70,2427,775],{"class":76},[70,2429,778],{"class":186},[70,2431,781],{"class":190},[70,2433,2434],{"class":80}," \"  \"",[70,2436,787],{"class":190},[70,2438,2439],{"class":186}," pair.first ",[70,2441,781],{"class":190},[70,2443,2444],{"class":80}," \": \"",[70,2446,787],{"class":190},[70,2448,2449],{"class":186}," pair.second ",[70,2451,781],{"class":190},[70,2453,794],{"class":80},[70,2455,797],{"class":84},[70,2457,800],{"class":80},[70,2459,803],{"class":186},[70,2461,2462],{"class":72,"line":956},[70,2463,604],{"class":186},[70,2465,2466],{"class":72,"line":961},[70,2467,224],{"emptyLinePlaceholder":223},[70,2469,2470],{"class":72,"line":979},[70,2471,2472],{"class":230},"    \u002F\u002F C++17：在范围 for 中使用结构化绑定，直接命名 key 和 value。\n",[70,2474,2475],{"class":72,"line":984},[70,2476,2477],{"class":230},"    \u002F\u002F const auto& 表示只读引用，既不复制元素，也不会修改 map。\n",[70,2479,2480,2482,2484,2486,2489,2491,2493],{"class":72,"line":989},[70,2481,1251],{"class":76},[70,2483,778],{"class":186},[70,2485,781],{"class":190},[70,2487,2488],{"class":80}," \"C++17 traversal:",[70,2490,797],{"class":84},[70,2492,800],{"class":80},[70,2494,803],{"class":186},[70,2496,2497,2499,2501,2503,2505],{"class":72,"line":998},[70,2498,2410],{"class":190},[70,2500,947],{"class":186},[70,2502,373],{"class":190},[70,2504,376],{"class":190},[70,2506,2507],{"class":186}," [name, score] : scores)\n",[70,2509,2511],{"class":72,"line":2510},49,[70,2512,576],{"class":186},[70,2514,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2537,2539,2541,2543,2545],{"class":72,"line":2515},50,[70,2517,775],{"class":76},[70,2519,778],{"class":186},[70,2521,781],{"class":190},[70,2523,2434],{"class":80},[70,2525,787],{"class":190},[70,2527,1338],{"class":186},[70,2529,781],{"class":190},[70,2531,2444],{"class":80},[70,2533,787],{"class":190},[70,2535,2536],{"class":186}," score ",[70,2538,781],{"class":190},[70,2540,794],{"class":80},[70,2542,797],{"class":84},[70,2544,800],{"class":80},[70,2546,803],{"class":186},[70,2548,2550],{"class":72,"line":2549},51,[70,2551,604],{"class":186},[70,2553,2555],{"class":72,"line":2554},52,[70,2556,224],{"emptyLinePlaceholder":223},[70,2558,2560,2562,2564],{"class":72,"line":2559},53,[70,2561,610],{"class":190},[70,2563,568],{"class":84},[70,2565,803],{"class":186},[70,2567,2569],{"class":72,"line":2568},54,[70,2570,632],{"class":186},[15,2572,2573,171],{},[42,2574,1005],{},[61,2576,2579],{"className":2577,"code":2578,"language":1011},[1009],"before C++17 insert: Alice inserted, score: 85\nC++17 insert: Alice already exists, score: 85\n\nbefore C++17 traversal:\n  Alice: 85\n  Bob: 92\n  Charlie: 78\nC++17 traversal:\n  Alice: 85\n  Bob: 92\n  Charlie: 78\n",[19,2580,2578],{"__ignoreMap":66},[10,2582,2584],{"id":2583},"runtime-results","runtime results",[15,2586,2587],{},"See the \"running results\" for each example above.",[10,2589,2591],{"id":2590},"key-syntax-explanation-in-the-example","Key syntax explanation in the example",[15,2593,2594],{},"|Here is the translation of the provided Simplified Chinese Markdown fragment into natural American English, following all specified rules.",[2596,2597],"hr",{},[394,2599,2600,2621],{},[397,2601,2602],{},[400,2603,2604,2609,2612,2615,2618],{},[403,2605,2606],{"align":405},[42,2607,2608],{},"Example",[403,2610,2611],{"align":405},"Discusses what",[403,2613,2614],{"align":405},"Newly emerged syntax",[403,2616,2617],{"align":405},"Why write it this way",[403,2619,2620],{"align":405},"Precautions",[411,2622,2623],{},[400,2624,2625,2628,2635,2640,2643],{},[416,2626,2627],{"align":405},"Example 1",[416,2629,2630,2631,2634],{"align":405},"从 ",[19,2632,2633],{},"pair.first\u002Fsecond"," 改为解包 pair",[416,2636,2637],{"align":405},[19,2638,2639],{},"auto [value, ok] = pair",[416,2641,2642],{"align":405},"C++17 可以一次声明两个有意义的变量名",[416,2644,2645],{"align":405},"变量名可以自定义，但对应顺序不能改变",[15,2647,2648,2649,2652,2653,119,2656,2659],{},"|Example 2|从 ",[19,2650,2651],{},"std::get\u003CN>()","、数组下标改为统一解包|",[19,2654,2655],{},"auto [a,b,c] = tuple",[19,2657,2658],{},"auto [a,b,c] = array","|C++17 对 tuple 和数组采用相似语法|变量个数必须和 tuple、数组的元素个数一致|",[15,2661,2662,2663,2665,2666,2669],{},"|Example 3|从 ",[19,2664,143],{}," 改为解包结构体|",[19,2667,2668],{},"auto [x,y,z] = struct_obj","|C++17 按结构体成员声明顺序绑定|可绑定的成员需要满足访问条件，且顺序由结构体定义决定|",[15,2671,2672,2673,119,2676,2679,2680,2682,2683,116],{},"|Example 4|对比 C++17 前后的 map 写法|",[19,2674,2675],{},"auto [it, ok] = m.insert(...)",[19,2677,2678],{},"[name, score]","|返回值和 map 元素都能直接取出并命名|",[19,2681,2143],{}," returns ",[19,2684,2685],{},"pair\u003Citerator, bool>",[10,2687,2689,2690,2693,2694],{"id":2688},"the-difference-between-auto-a-b-and-auto-a-b","The difference between ",[19,2691,2692],{},"auto [a, b]"," and ",[19,2695,2696],{},"auto& [a, b]",[15,2698,2699,2700,119,2702,2704,2705,2707],{},"下面讨论的 ",[19,2701,2692],{},[19,2703,2696],{}," 都是 C++17 结构化绑定语法。结构化绑定不写 ",[19,2706,1175],{}," 时通常会产生副本；遍历大对象或想修改原数据时，需要考虑使用引用。",[15,2709,2710,2711,2713,2714,171],{},"C++17 之前没有结构化绑定。修改 map 的 value 时，通常取得整个 ",[19,2712,321],{}," 的引用，再修改它的 ",[19,2715,170],{},[61,2717,2719],{"className":174,"code":2718,"language":176,"meta":66,"style":66},"\u002F\u002F C++17 之前：pair.second 是 map 元素的 value。\nfor (auto& pair : scores)\n{\n    pair.second += 10;\n}\n",[19,2720,2721,2726,2737,2741,2754],{"__ignoreMap":66},[70,2722,2723],{"class":72,"line":73},[70,2724,2725],{"class":230},"\u002F\u002F C++17 之前：pair.second 是 map 元素的 value。\n",[70,2727,2728,2731,2733,2735],{"class":72,"line":220},[70,2729,2730],{"class":190},"for",[70,2732,947],{"class":186},[70,2734,359],{"class":190},[70,2736,2419],{"class":186},[70,2738,2739],{"class":72,"line":227},[70,2740,553],{"class":186},[70,2742,2743,2746,2749,2752],{"class":72,"line":234},[70,2744,2745],{"class":186},"    pair.second ",[70,2747,2748],{"class":190},"+=",[70,2750,2751],{"class":84}," 10",[70,2753,803],{"class":186},[70,2755,2756],{"class":72,"line":248},[70,2757,632],{"class":186},[469,2759,2761],{"id":2760},"示例-5c17-结构化绑定中修改-map-的-value-必须使用引用","示例 5：C++17 结构化绑定中，修改 map 的 value 必须使用引用",[61,2763,2765],{"className":174,"code":2764,"language":176,"meta":66,"style":66},"#include \u003Ciostream>\n#include \u003Cmap>\n#include \u003Cstring>\n\nint main()\n{\n    std::map\u003Cstd::string, int> scores = {\n        {\"Alice\", 85},\n        {\"Bob\", 92}\n    };\n\n    \u002F\u002F C++17：没有写 &，name 和 score 不引用 map 中的原元素。\n    \u002F\u002F 每轮循环得到的是当前 key 和 value 的副本。\n    for (auto [name, score] : scores)\n    {\n        \u002F\u002F 这里只修改局部变量 score，scores 中的原分数不会变化。\n        score += 10;\n    }\n\n    std::cout \u003C\u003C \"after auto copy:\\n\";\n\n    \u002F\u002F C++17：const auto& 不复制 map 元素，适合只读输出。\n    for (const auto& [name, score] : scores)\n    {\n        std::cout \u003C\u003C name \u003C\u003C \": \" \u003C\u003C score \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：auto& 让 name 和 score 引用 map 中的原元素。\n    for (auto& [name, score] : scores)\n    {\n        \u002F\u002F score 是 value 的引用，因此这次会修改原 map 中的分数。\n        score += 10;\n    }\n\n    std::cout \u003C\u003C \"after auto& reference:\\n\";\n\n    \u002F\u002F 修改完成后再次只读遍历，确认新分数已经保存在 map 中。\n    for (const auto& [name, score] : scores)\n    {\n        std::cout \u003C\u003C name \u003C\u003C \": \" \u003C\u003C score \u003C\u003C \"\\n\";\n    }\n\n    return 0;\n}\n",[19,2766,2767,2773,2779,2785,2789,2797,2801,2822,2836,2848,2852,2856,2861,2866,2876,2880,2885,2896,2900,2904,2921,2925,2930,2942,2946,2974,2978,2982,2987,2997,3001,3006,3016,3020,3024,3041,3045,3050,3062,3066,3094,3098,3102,3110],{"__ignoreMap":66},[70,2768,2769,2771],{"class":72,"line":73},[70,2770,482],{"class":190},[70,2772,485],{"class":80},[70,2774,2775,2777],{"class":72,"line":220},[70,2776,482],{"class":190},[70,2778,2061],{"class":80},[70,2780,2781,2783],{"class":72,"line":227},[70,2782,482],{"class":190},[70,2784,1035],{"class":80},[70,2786,2787],{"class":72,"line":234},[70,2788,224],{"emptyLinePlaceholder":223},[70,2790,2791,2793,2795],{"class":72,"line":248},[70,2792,237],{"class":190},[70,2794,645],{"class":76},[70,2796,648],{"class":186},[70,2798,2799],{"class":72,"line":550},[70,2800,553],{"class":186},[70,2802,2803,2805,2807,2809,2811,2813,2815,2818,2820],{"class":72,"line":556},[70,2804,1251],{"class":76},[70,2806,2090],{"class":186},[70,2808,516],{"class":190},[70,2810,183],{"class":76},[70,2812,2097],{"class":186},[70,2814,2100],{"class":190},[70,2816,2817],{"class":186}," scores ",[70,2819,203],{"class":190},[70,2821,1670],{"class":186},[70,2823,2824,2827,2829,2831,2833],{"class":72,"line":573},[70,2825,2826],{"class":186},"        {",[70,2828,1097],{"class":80},[70,2830,194],{"class":186},[70,2832,2153],{"class":84},[70,2834,2835],{"class":186},"},\n",[70,2837,2838,2840,2842,2844,2846],{"class":72,"line":579},[70,2839,2826],{"class":186},[70,2841,2345],{"class":80},[70,2843,194],{"class":186},[70,2845,2350],{"class":84},[70,2847,632],{"class":186},[70,2849,2850],{"class":72,"line":601},[70,2851,1725],{"class":186},[70,2853,2854],{"class":72,"line":607},[70,2855,224],{"emptyLinePlaceholder":223},[70,2857,2858],{"class":72,"line":629},[70,2859,2860],{"class":230},"    \u002F\u002F C++17：没有写 &，name 和 score 不引用 map 中的原元素。\n",[70,2862,2863],{"class":72,"line":635},[70,2864,2865],{"class":230},"    \u002F\u002F 每轮循环得到的是当前 key 和 value 的副本。\n",[70,2867,2868,2870,2872,2874],{"class":72,"line":640},[70,2869,2410],{"class":190},[70,2871,947],{"class":186},[70,2873,307],{"class":190},[70,2875,2507],{"class":186},[70,2877,2878],{"class":72,"line":651},[70,2879,576],{"class":186},[70,2881,2882],{"class":72,"line":656},[70,2883,2884],{"class":230},"        \u002F\u002F 这里只修改局部变量 score，scores 中的原分数不会变化。\n",[70,2886,2887,2890,2892,2894],{"class":72,"line":662},[70,2888,2889],{"class":186},"        score ",[70,2891,2748],{"class":190},[70,2893,2751],{"class":84},[70,2895,803],{"class":186},[70,2897,2898],{"class":72,"line":700},[70,2899,604],{"class":186},[70,2901,2902],{"class":72,"line":705},[70,2903,224],{"emptyLinePlaceholder":223},[70,2905,2906,2908,2910,2912,2915,2917,2919],{"class":72,"line":711},[70,2907,1251],{"class":76},[70,2909,778],{"class":186},[70,2911,781],{"class":190},[70,2913,2914],{"class":80}," \"after auto copy:",[70,2916,797],{"class":84},[70,2918,800],{"class":80},[70,2920,803],{"class":186},[70,2922,2923],{"class":72,"line":727},[70,2924,224],{"emptyLinePlaceholder":223},[70,2926,2927],{"class":72,"line":732},[70,2928,2929],{"class":230},"    \u002F\u002F C++17：const auto& 不复制 map 元素，适合只读输出。\n",[70,2931,2932,2934,2936,2938,2940],{"class":72,"line":738},[70,2933,2410],{"class":190},[70,2935,947],{"class":186},[70,2937,373],{"class":190},[70,2939,376],{"class":190},[70,2941,2507],{"class":186},[70,2943,2944],{"class":72,"line":754},[70,2945,576],{"class":186},[70,2947,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972],{"class":72,"line":759},[70,2949,775],{"class":76},[70,2951,778],{"class":186},[70,2953,781],{"class":190},[70,2955,1338],{"class":186},[70,2957,781],{"class":190},[70,2959,2444],{"class":80},[70,2961,787],{"class":190},[70,2963,2536],{"class":186},[70,2965,781],{"class":190},[70,2967,794],{"class":80},[70,2969,797],{"class":84},[70,2971,800],{"class":80},[70,2973,803],{"class":186},[70,2975,2976],{"class":72,"line":767},[70,2977,604],{"class":186},[70,2979,2980],{"class":72,"line":772},[70,2981,224],{"emptyLinePlaceholder":223},[70,2983,2984],{"class":72,"line":806},[70,2985,2986],{"class":230},"    \u002F\u002F C++17：auto& 让 name 和 score 引用 map 中的原元素。\n",[70,2988,2989,2991,2993,2995],{"class":72,"line":811},[70,2990,2410],{"class":190},[70,2992,947],{"class":186},[70,2994,359],{"class":190},[70,2996,2507],{"class":186},[70,2998,2999],{"class":72,"line":816},[70,3000,576],{"class":186},[70,3002,3003],{"class":72,"line":822},[70,3004,3005],{"class":230},"        \u002F\u002F score 是 value 的引用，因此这次会修改原 map 中的分数。\n",[70,3007,3008,3010,3012,3014],{"class":72,"line":828},[70,3009,2889],{"class":186},[70,3011,2748],{"class":190},[70,3013,2751],{"class":84},[70,3015,803],{"class":186},[70,3017,3018],{"class":72,"line":852},[70,3019,604],{"class":186},[70,3021,3022],{"class":72,"line":860},[70,3023,224],{"emptyLinePlaceholder":223},[70,3025,3026,3028,3030,3032,3035,3037,3039],{"class":72,"line":865},[70,3027,1251],{"class":76},[70,3029,778],{"class":186},[70,3031,781],{"class":190},[70,3033,3034],{"class":80}," \"after auto& reference:",[70,3036,797],{"class":84},[70,3038,800],{"class":80},[70,3040,803],{"class":186},[70,3042,3043],{"class":72,"line":891},[70,3044,224],{"emptyLinePlaceholder":223},[70,3046,3047],{"class":72,"line":896},[70,3048,3049],{"class":230},"    \u002F\u002F 修改完成后再次只读遍历，确认新分数已经保存在 map 中。\n",[70,3051,3052,3054,3056,3058,3060],{"class":72,"line":901},[70,3053,2410],{"class":190},[70,3055,947],{"class":186},[70,3057,373],{"class":190},[70,3059,376],{"class":190},[70,3061,2507],{"class":186},[70,3063,3064],{"class":72,"line":907},[70,3065,576],{"class":186},[70,3067,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092],{"class":72,"line":931},[70,3069,775],{"class":76},[70,3071,778],{"class":186},[70,3073,781],{"class":190},[70,3075,1338],{"class":186},[70,3077,781],{"class":190},[70,3079,2444],{"class":80},[70,3081,787],{"class":190},[70,3083,2536],{"class":186},[70,3085,781],{"class":190},[70,3087,794],{"class":80},[70,3089,797],{"class":84},[70,3091,800],{"class":80},[70,3093,803],{"class":186},[70,3095,3096],{"class":72,"line":936},[70,3097,604],{"class":186},[70,3099,3100],{"class":72,"line":942},[70,3101,224],{"emptyLinePlaceholder":223},[70,3103,3104,3106,3108],{"class":72,"line":956},[70,3105,610],{"class":190},[70,3107,568],{"class":84},[70,3109,803],{"class":186},[70,3111,3112],{"class":72,"line":961},[70,3113,632],{"class":186},[15,3115,3116,171],{},[42,3117,1005],{},[61,3119,3122],{"className":3120,"code":3121,"language":1011},[1009],"after auto copy:\nAlice: 85\nBob: 92\nafter auto& reference:\nAlice: 95\nBob: 102\n",[19,3123,3121],{"__ignoreMap":66},[15,3125,3126,3127,3130,3131,3134,3135,3138],{},"注意：",[19,3128,3129],{},"map"," 的 key 仍然不能改。即使使用 C++17 的 ",[19,3132,3133],{},"auto& [name, score]","，",[19,3136,3137],{},"name"," 也是只读的，因为 map 必须保证 key 不变，才能维持内部的排序规则。",[10,3140,3142],{"id":3141},"common-errors","Common Errors",[15,3144,3145],{},[42,3146,3147],{},"Error 1: Variable count mismatch",[61,3149,3151],{"className":174,"code":3150,"language":176,"meta":66,"style":66},"\u002F\u002F C++17：右侧 tuple 有三个元素，左侧却只有两个变量，无法一一对应。\nauto [x, y] = std::make_tuple(1, 2, 3);  \u002F\u002F ❌ 编译错误\n",[19,3152,3153,3158],{"__ignoreMap":66},[70,3154,3155],{"class":72,"line":73},[70,3156,3157],{"class":230},"\u002F\u002F C++17：右侧 tuple 有三个元素，左侧却只有两个变量，无法一一对应。\n",[70,3159,3160,3162,3165,3167,3169,3171,3174,3176,3178,3180,3182,3184,3187,3190],{"class":72,"line":220},[70,3161,307],{"class":190},[70,3163,3164],{"class":186}," [x, y] ",[70,3166,203],{"class":190},[70,3168,668],{"class":76},[70,3170,511],{"class":186},[70,3172,3173],{"class":76},"make_tuple",[70,3175,531],{"class":186},[70,3177,1216],{"class":84},[70,3179,194],{"class":186},[70,3181,694],{"class":84},[70,3183,194],{"class":186},[70,3185,3186],{"class":84},"3",[70,3188,3189],{"class":186},");",[70,3191,3192],{"class":230},"  \u002F\u002F ❌ 编译错误\n",[15,3194,3195],{},"Correct approach: The number of variables must match the number of elements in the composite type.",[15,3197,3198],{},[42,3199,3200],{},"Error 2: Unpacking a struct with non-public members",[61,3202,3204],{"className":174,"code":3203,"language":176,"meta":66,"style":66},"struct A { private: int x; public: int y; };\nA obj;\n\n\u002F\u002F C++17：此处不能访问私有成员 x，因此不能这样进行结构化绑定。\nauto [x, y] = obj;  \u002F\u002F ❌ 编译错误\n",[19,3205,3206,3232,3237,3241,3246],{"__ignoreMap":66},[70,3207,3208,3210,3213,3216,3219,3221,3224,3227,3229],{"class":72,"line":73},[70,3209,1589],{"class":190},[70,3211,3212],{"class":76}," A",[70,3214,3215],{"class":186}," { ",[70,3217,3218],{"class":190},"private:",[70,3220,716],{"class":190},[70,3222,3223],{"class":186}," x; ",[70,3225,3226],{"class":190},"public:",[70,3228,716],{"class":190},[70,3230,3231],{"class":186}," y; };\n",[70,3233,3234],{"class":72,"line":220},[70,3235,3236],{"class":186},"A obj;\n",[70,3238,3239],{"class":72,"line":227},[70,3240,224],{"emptyLinePlaceholder":223},[70,3242,3243],{"class":72,"line":234},[70,3244,3245],{"class":230},"\u002F\u002F C++17：此处不能访问私有成员 x，因此不能这样进行结构化绑定。\n",[70,3247,3248,3250,3252,3254,3257],{"class":72,"line":248},[70,3249,307],{"class":190},[70,3251,3164],{"class":186},[70,3253,203],{"class":190},[70,3255,3256],{"class":186}," obj;",[70,3258,3192],{"class":230},[15,3260,3261,3262,3265],{},"正确做法：在使用结构化绑定的位置，所有被绑定的成员都必须可以访问。对初学阶段常见的普通结构体来说，最直观的做法是让这些成员保持 ",[19,3263,3264],{},"public","。",[15,3267,3268],{},[42,3269,3270,3271,3273,3274,3276],{},"Error 3: Using ",[19,3272,307],{}," instead of ",[19,3275,359],{}," causes changes to be ineffective",[61,3278,3280],{"className":174,"code":3279,"language":176,"meta":66,"style":66},"\u002F\u002F C++17：没有写 &，k 和 v 是从 map 元素得到的副本。\nauto [k, v] = *map.begin();\n\n\u002F\u002F 这里只修改局部变量 v，不会修改 map 中的 value。\nv = 100;\n",[19,3281,3282,3287,3307,3311,3316],{"__ignoreMap":66},[70,3283,3284],{"class":72,"line":73},[70,3285,3286],{"class":230},"\u002F\u002F C++17：没有写 &，k 和 v 是从 map 元素得到的副本。\n",[70,3288,3289,3291,3294,3296,3299,3302,3305],{"class":72,"line":220},[70,3290,307],{"class":190},[70,3292,3293],{"class":186}," [k, v] ",[70,3295,203],{"class":190},[70,3297,3298],{"class":190}," *",[70,3300,3301],{"class":186},"map.",[70,3303,3304],{"class":76},"begin",[70,3306,1154],{"class":186},[70,3308,3309],{"class":72,"line":227},[70,3310,224],{"emptyLinePlaceholder":223},[70,3312,3313],{"class":72,"line":234},[70,3314,3315],{"class":230},"\u002F\u002F 这里只修改局部变量 v，不会修改 map 中的 value。\n",[70,3317,3318,3321,3323,3326],{"class":72,"line":248},[70,3319,3320],{"class":186},"v ",[70,3322,203],{"class":190},[70,3324,3325],{"class":84}," 100",[70,3327,803],{"class":186},[15,3329,3330,3331,3334],{},"The correct approach is to use ",[19,3332,3333],{},"auto& [k, v] = ..."," to modify the original value.",[10,3336,3337],{"id":3337},"使用建议",[3339,3340,3341,3345,3348,3351,3354],"ul",{},[3342,3343,3344],"li",{},"明确目标：在开始前确定您的具体需求，以便选择最合适的工具或教程。",[3342,3346,3347],{},"充分利用资源：参考官方文档、教程和博客，这些资料能帮助您快速上手并解决问题。",[3342,3349,3350],{},"实践应用：通过动手操作项目或编写代码来巩固学习成果，提升实际操作能力。",[3342,3352,3353],{},"问题解决：遇到困难时，查阅参考资料或寻求社区支持，逐步培养独立解决问题的能力。",[3342,3355,3356],{},"分享经验：完成项目后，可以撰写文章或博客分享心得，帮助其他学习者。",[15,3358,3359],{},"如果需要针对特定领域（如单片机、机器人或环境搭建）的进一步建议，请提供更多信息，我将为您细化内容。",[3361,3362,3363,3374],"ol",{},[3342,3364,3365,3373],{},[42,3366,3367,3368,616,3370,3372],{},"When a function returns multiple values, prefer ",[19,3369,25],{},[19,3371,21],{}," + structured bindings"," over output parameters.",[3342,3375,3376,3382],{},[42,3377,3378,3379],{},"C++17 中只读遍历 map 时优先用 ",[19,3380,3381],{},"const auto& [key, value]","，避免拷贝，也能清楚表达 key 和 value 的含义。",[3361,3384,3385],{"start":227},[3342,3386,3387,3390,3391,3394,3395,119,3397,3399],{},[42,3388,3389],{},"解包 insert 返回值","：C++17 的 ",[19,3392,3393],{},"auto [it, inserted] = map.insert(...)"," 比继续使用 ",[19,3396,33],{},[19,3398,36],{}," 更直观。",[3361,3401,3402],{"start":234},[3342,3403,3404,3409,3410,3265],{},[42,3405,3406,3407],{},"需要修改原数据时使用 ",[19,3408,359],{},"；只读且不想拷贝时使用 ",[19,3411,3412],{},"const auto&",[3361,3414,3415],{"start":248},[3342,3416,3417,3420,3421,3424,3425,3265],{},[42,3418,3419],{},"维护 C++17 以前的项目时继续使用原有访问方式","：pair 用 ",[19,3422,3423],{},".first\u002F.second","，tuple 用 ",[19,3426,2651],{},[10,3428,3430],{"id":3429},"summary","Summary",[3339,3432,3433],{},[3342,3434,3435,3436,119,3438,3440],{},"C++17 之前需要通过 ",[19,3437,3423],{},[19,3439,2651],{},"、成员名或数组下标分别取值。",[3339,3442,3443],{},[3342,3444,3445],{},"C++17 结构化绑定可以把 pair \u002F tuple \u002F 结构体 \u002F 数组分解成独立变量。",[3339,3447,3448],{},[3342,3449,3450,3451,3265],{},"C++17 基本语法是 ",[19,3452,3453],{},"auto [var1, var2, ...] = expression",[3339,3455,3456,3463],{},[3342,3457,3458,3459,3462],{},"When iterating through a map, ",[19,3460,3461],{},"[key, value]"," is best practice (C++17).",[3342,3464,3465,3466,3469],{},"Using the ",[19,3467,3468],{},"[iterator, bool]"," to unpack the return value is quite clear.",[3471,3472,3473],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":66,"searchDepth":220,"depth":220,"links":3475},[3476,3477,3478,3479,3480,3481,3482,3483,3489,3490,3491,3495,3496,3497],{"id":12,"depth":220,"text":13},{"id":48,"depth":220,"text":49},{"id":55,"depth":220,"text":56},{"id":88,"depth":220,"text":89},{"id":103,"depth":220,"text":104},{"id":328,"depth":220,"text":329},{"id":388,"depth":220,"text":389},{"id":466,"depth":220,"text":467,"children":3484},[3485,3486,3487,3488],{"id":471,"depth":227,"text":472},{"id":1016,"depth":227,"text":1017},{"id":1562,"depth":227,"text":1563},{"id":2042,"depth":227,"text":2043},{"id":2583,"depth":220,"text":2584},{"id":2590,"depth":220,"text":2591},{"id":2688,"depth":220,"text":3492,"children":3493},"The difference between auto [a, b] and auto& [a, b]",[3494],{"id":2760,"depth":227,"text":2761},{"id":3141,"depth":220,"text":3142},{"id":3337,"depth":220,"text":3337},{"id":3429,"depth":220,"text":3430},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","2000-0600","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-0600-结构化绑定",false,null,"en-US","en-us",{},{"title":5,"description":66},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","FmsyVOjvkl-khcu7-1ZdRmMGTJptiAIy4WZ3tDfhR08",[3517,3523,3528,3533,3538,3543,3548,3553,3558,3563,3568,3573,3578,3583,3588,3593,3598,3603,3608,3613,3618,3623,3628,3633,3638,3643,3648,3653,3658,3663,3668,3673,3678,3683,3688,3693,3698,3703,3707,3712,3717,3722,3727,3728,3733,3738,3743,3748,3753,3758,3763,3768,3773,3778,3783,3788,3793,3798,3803,3808,3813,3818,3823,3828,3833,3838,3843,3848,3853,3858,3863,3868,3873,3878,3883,3888,3893,3898,3903,3908,3913,3918],{"path":3518,"stem":3519,"title":3520,"date":3500,"chapterOrder":3521,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3524,"stem":3525,"title":3526,"date":3500,"chapterOrder":3527,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3529,"stem":3530,"title":3531,"date":3500,"chapterOrder":3532,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3534,"stem":3535,"title":3536,"date":3500,"chapterOrder":3537,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3539,"stem":3540,"title":3541,"date":3500,"chapterOrder":3542,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3544,"stem":3545,"title":3546,"date":3500,"chapterOrder":3547,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3549,"stem":3550,"title":3551,"date":3500,"chapterOrder":3552,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","array","0700",{"path":3554,"stem":3555,"title":3556,"date":3500,"chapterOrder":3557,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3559,"stem":3560,"title":3561,"date":3500,"chapterOrder":3562,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","pointer","0900",{"path":3564,"stem":3565,"title":3566,"date":3500,"chapterOrder":3567,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3569,"stem":3570,"title":3571,"date":3500,"chapterOrder":3572,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3574,"stem":3575,"title":3576,"date":3500,"chapterOrder":3577,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","reference","1200",{"path":3579,"stem":3580,"title":3581,"date":3500,"chapterOrder":3582,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","Advanced Functions and Namespaces","1300",{"path":3584,"stem":3585,"title":3586,"date":3500,"chapterOrder":3587,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3589,"stem":3590,"title":3591,"date":3500,"chapterOrder":3592,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3594,"stem":3595,"title":3596,"date":3500,"chapterOrder":3597,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3599,"stem":3600,"title":3601,"date":3500,"chapterOrder":3602,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3604,"stem":3605,"title":3606,"date":3500,"chapterOrder":3607,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3609,"stem":3610,"title":3611,"date":3500,"chapterOrder":3612,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3614,"stem":3615,"title":3616,"date":3500,"chapterOrder":3617,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3619,"stem":3620,"title":3621,"date":3500,"chapterOrder":3622,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3624,"stem":3625,"title":3626,"date":3500,"chapterOrder":3627,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3629,"stem":3630,"title":3631,"date":3500,"chapterOrder":3632,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","template","1700",{"path":3634,"stem":3635,"title":3636,"date":3500,"chapterOrder":3637,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3639,"stem":3640,"title":3641,"date":3500,"chapterOrder":3642,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3644,"stem":3645,"title":3646,"date":3500,"chapterOrder":3647,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3649,"stem":3650,"title":3651,"date":3500,"chapterOrder":3652,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3654,"stem":3655,"title":3656,"date":3500,"chapterOrder":3657,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3659,"stem":3660,"title":3661,"date":3500,"chapterOrder":3662,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3664,"stem":3665,"title":3666,"date":3500,"chapterOrder":3667,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3669,"stem":3670,"title":3671,"date":3500,"chapterOrder":3672,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3674,"stem":3675,"title":3676,"date":3500,"chapterOrder":3677,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3679,"stem":3680,"title":3681,"date":3500,"chapterOrder":3682,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3684,"stem":3685,"title":3686,"date":3500,"chapterOrder":3687,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3689,"stem":3690,"title":3691,"date":3500,"chapterOrder":3692,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3694,"stem":3695,"title":3696,"date":3500,"chapterOrder":3697,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3699,"stem":3700,"title":3701,"date":3500,"chapterOrder":3702,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3704,"stem":3705,"title":307,"date":3500,"chapterOrder":3706,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3708,"stem":3709,"title":3710,"date":3500,"chapterOrder":3711,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3713,"stem":3714,"title":3715,"date":3500,"chapterOrder":3716,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3718,"stem":3719,"title":3720,"date":3500,"chapterOrder":3721,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3723,"stem":3724,"title":3725,"date":3500,"chapterOrder":3726,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3498,"stem":3514,"title":5,"date":3500,"chapterOrder":3499,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},{"path":3729,"stem":3730,"title":3731,"date":3500,"chapterOrder":3732,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":3734,"stem":3735,"title":3736,"date":3500,"chapterOrder":3737,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3739,"stem":3740,"title":3741,"date":3500,"chapterOrder":3742,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3744,"stem":3745,"title":3746,"date":3500,"chapterOrder":3747,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3749,"stem":3750,"title":3751,"date":3500,"chapterOrder":3752,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda expression","2000-1100",{"path":3754,"stem":3755,"title":3756,"date":3500,"chapterOrder":3757,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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","std::function","2000-1200",{"path":3759,"stem":3760,"title":3761,"date":3500,"chapterOrder":3762,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3764,"stem":3765,"title":3766,"date":3500,"chapterOrder":3767,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3769,"stem":3770,"title":3771,"date":3500,"chapterOrder":3772,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3774,"stem":3775,"title":3776,"date":3500,"chapterOrder":3777,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3779,"stem":3780,"title":3781,"date":3500,"chapterOrder":3782,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3784,"stem":3785,"title":3786,"date":3500,"chapterOrder":3787,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3789,"stem":3790,"title":3791,"date":3500,"chapterOrder":3792,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3794,"stem":3795,"title":3796,"date":3500,"chapterOrder":3797,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3799,"stem":3800,"title":3801,"date":3500,"chapterOrder":3802,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3804,"stem":3805,"title":3806,"date":3500,"chapterOrder":3807,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3809,"stem":3810,"title":3811,"date":3500,"chapterOrder":3812,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3814,"stem":3815,"title":3816,"date":3500,"chapterOrder":3817,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3819,"stem":3820,"title":3821,"date":3500,"chapterOrder":3822,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3824,"stem":3825,"title":3826,"date":3500,"chapterOrder":3827,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3829,"stem":3830,"title":3831,"date":3500,"chapterOrder":3832,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3834,"stem":3835,"title":3836,"date":3500,"chapterOrder":3837,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3839,"stem":3840,"title":3841,"date":3500,"chapterOrder":3842,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3844,"stem":3845,"title":3846,"date":3500,"chapterOrder":3847,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3849,"stem":3850,"title":3851,"date":3500,"chapterOrder":3852,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3854,"stem":3855,"title":3856,"date":3500,"chapterOrder":3857,"chapterDepth":220,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3859,"stem":3860,"title":3861,"date":3500,"chapterOrder":3862,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3864,"stem":3865,"title":3866,"date":3500,"chapterOrder":3867,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3869,"stem":3870,"title":3871,"date":3500,"chapterOrder":3872,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3874,"stem":3875,"title":3876,"date":3500,"chapterOrder":3877,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3879,"stem":3880,"title":3881,"date":3500,"chapterOrder":3882,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3884,"stem":3885,"title":3886,"date":3500,"chapterOrder":3887,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3889,"stem":3890,"title":3891,"date":3500,"chapterOrder":3892,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3894,"stem":3895,"title":3896,"date":3500,"chapterOrder":3897,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3899,"stem":3900,"title":3901,"date":3500,"chapterOrder":3902,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3904,"stem":3905,"title":3906,"date":3500,"chapterOrder":3907,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3909,"stem":3910,"title":3911,"date":3500,"chapterOrder":3912,"chapterDepth":73,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3914,"stem":3915,"title":3916,"date":3500,"chapterOrder":3917,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":3507},"\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":3503,"stem":3919,"title":3920,"date":3500,"chapterOrder":3508,"chapterDepth":3522,"docKey":3502,"docRoot":3503,"docTitle":3504,"isWikiDoc":223,"isWikiIndex":223},"_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++ tutorial",{"variants":3922},[3923,3924,3927,3930,3933],{"path":3498,"localeSlug":3510,"i18nKey":3506},{"path":3925,"localeSlug":3926,"i18nKey":3506},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-hant",{"path":3928,"localeSlug":3929,"i18nKey":3506},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-hk",{"path":3931,"localeSlug":3932,"i18nKey":3506},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-tw",{"path":3934,"localeSlug":3935,"i18nKey":3506},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-cn",[3498,3513,3925,3513,3928,3513,3931,3513,3934,3513],1784646867431]