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