[{"data":1,"prerenderedAt":2992},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span":3,"wiki-doc-items-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span":2568,"language-switcher-data-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span":2976,"wiki-i18n-paths-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span":2991},{"id":4,"title":5,"body":6,"canonicalPath":2550,"chapter":2551,"chapterSort":2552,"date":2553,"description":82,"docI18nKey":2554,"docKey":2555,"docRoot":2556,"docTitle":2557,"extension":2558,"i18nKey":2559,"isBlogPost":2560,"isWikiDoc":262,"isWikiIndex":2560,"layout":2561,"legacyPath":2562,"locale":2563,"localeSlug":2564,"meta":2565,"navigation":262,"path":2550,"seo":2566,"sourcePath":2562,"sourceStem":2559,"stem":2559,"wikiDepth":89,"__hash__":2567},"content/wiki/2023-10-05-Cplusplus教学/ch18-16-std-span.md","std::span",{"type":7,"value":8,"toc":2528},"minimark",[9,13,17,40,49,52,66,70,73,76,98,101,386,389,450,453,458,843,849,857,861,1310,1314,1320,1324,1740,1744,1750,1752,1755,1758,1846,1857,1899,1910,1914,2198,2202,2208,2233,2236,2241,2321,2324,2329,2375,2378,2383,2442,2445,2448,2494,2497,2524],[10,11,12],"h2",{"id":12},"本节解决什么问题",[14,15,16],"p",{},"你要写一个函数，处理一段连续数据——可以是 vector、array、C 数组。在 C++20 之前，你有两种选择：",[18,19,20,32],"ol",{},[21,22,23,31],"li",{},[24,25,26,27],"strong",{},"传 ",[28,29,30],"code",{},"const std::vector\u003CT>&","：只能接收 vector，不能接收 array 或 C 数组。",[21,33,34,39],{},[24,35,26,36],{},[28,37,38],{},"const T* data, size_t size","：能接收所有，但丢失了大小信息，容易写错。",[14,41,42,44,45,48],{},[28,43,5],{}," 提供了",[24,46,47],{},"统一的只读（或可写）视图","，不拥有数据，只是一个\"窗口\"，可以统一处理所有连续内存容器。",[10,50,51],{"id":51},"这个特性是什么",[14,53,54,57,58,61,62,65],{},[28,55,56],{},"std::span\u003CT>"," 是 C++20 引入的",[24,59,60],{},"视图类型","，它不拥有数据，只是指向一段连续内存的指针 + 大小的轻量包装。你可以把它理解为\"",[24,63,64],{},"对数组的引用","\"。",[10,67,69],{"id":68},"c-标准版本","C++ 标准版本",[14,71,72],{},"C++20",[10,74,75],{"id":75},"需要的头文件",[77,78,83],"pre",{"className":79,"code":80,"language":81,"meta":82,"style":82},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Cspan>\n","cpp","",[28,84,85],{"__ignoreMap":82},[86,87,90,94],"span",{"class":88,"line":89},"line",1,[86,91,93],{"class":92},"szBVR","#include",[86,95,97],{"class":96},"sZZnC"," \u003Cspan>\n",[10,99,100],{"id":100},"基本语法",[77,102,104],{"className":79,"code":103,"language":81,"meta":82,"style":82},"// span 不拥有数据，只是观察\nstd::span\u003CT> sp;             // 空 span\nstd::span\u003CT> sp(ptr, size);  // 从指针 + 大小构造\nstd::span\u003CT> sp(vector);     // 从 vector 构造\nstd::span\u003CT> sp(array);      // 从 std::array 构造\nstd::span\u003CT> sp(c_array);    // 从 C 数组构造\n\n// 常用操作\nsp.size();      // 元素个数\nsp.empty();     // 是否为空\nsp[i];          // 下标访问\nsp.front();     // 第一个元素\nsp.back();      // 最后一个元素\nsp.data();      // 底层指针\nsp.subspan(pos, count);  // 子视图\nsp.first(n);    // 前 n 个元素的子视图\nsp.last(n);     // 后 n 个元素的子视图\n",[28,105,106,112,138,176,203,230,257,264,270,284,297,306,319,332,345,359,373],{"__ignoreMap":82},[86,107,108],{"class":88,"line":89},[86,109,111],{"class":110},"sJ8bj","// span 不拥有数据，只是观察\n",[86,113,115,119,123,126,129,132,135],{"class":88,"line":114},2,[86,116,118],{"class":117},"sScJk","std",[86,120,122],{"class":121},"sVt8B","::span",[86,124,125],{"class":92},"\u003C",[86,127,128],{"class":121},"T",[86,130,131],{"class":92},">",[86,133,134],{"class":121}," sp;",[86,136,137],{"class":110},"             // 空 span\n",[86,139,141,143,146,148,150,152,155,158,161,164,167,170,173],{"class":88,"line":140},3,[86,142,118],{"class":117},[86,144,145],{"class":121},"::",[86,147,86],{"class":117},[86,149,125],{"class":121},[86,151,128],{"class":117},[86,153,154],{"class":121},"> ",[86,156,157],{"class":117},"sp",[86,159,160],{"class":121},"(",[86,162,163],{"class":117},"ptr",[86,165,166],{"class":121},", ",[86,168,169],{"class":117},"size",[86,171,172],{"class":121},");",[86,174,175],{"class":110},"  // 从指针 + 大小构造\n",[86,177,179,181,183,185,187,189,191,193,195,198,200],{"class":88,"line":178},4,[86,180,118],{"class":117},[86,182,145],{"class":121},[86,184,86],{"class":117},[86,186,125],{"class":121},[86,188,128],{"class":117},[86,190,154],{"class":121},[86,192,157],{"class":117},[86,194,160],{"class":121},[86,196,197],{"class":117},"vector",[86,199,172],{"class":121},[86,201,202],{"class":110},"     // 从 vector 构造\n",[86,204,206,208,210,212,214,216,218,220,222,225,227],{"class":88,"line":205},5,[86,207,118],{"class":117},[86,209,145],{"class":121},[86,211,86],{"class":117},[86,213,125],{"class":121},[86,215,128],{"class":117},[86,217,154],{"class":121},[86,219,157],{"class":117},[86,221,160],{"class":121},[86,223,224],{"class":117},"array",[86,226,172],{"class":121},[86,228,229],{"class":110},"      // 从 std::array 构造\n",[86,231,233,235,237,239,241,243,245,247,249,252,254],{"class":88,"line":232},6,[86,234,118],{"class":117},[86,236,145],{"class":121},[86,238,86],{"class":117},[86,240,125],{"class":121},[86,242,128],{"class":117},[86,244,154],{"class":121},[86,246,157],{"class":117},[86,248,160],{"class":121},[86,250,251],{"class":117},"c_array",[86,253,172],{"class":121},[86,255,256],{"class":110},"    // 从 C 数组构造\n",[86,258,260],{"class":88,"line":259},7,[86,261,263],{"emptyLinePlaceholder":262},true,"\n",[86,265,267],{"class":88,"line":266},8,[86,268,269],{"class":110},"// 常用操作\n",[86,271,273,276,278,281],{"class":88,"line":272},9,[86,274,275],{"class":121},"sp.",[86,277,169],{"class":117},[86,279,280],{"class":121},"();",[86,282,283],{"class":110},"      // 元素个数\n",[86,285,287,289,292,294],{"class":88,"line":286},10,[86,288,275],{"class":121},[86,290,291],{"class":117},"empty",[86,293,280],{"class":121},[86,295,296],{"class":110},"     // 是否为空\n",[86,298,300,303],{"class":88,"line":299},11,[86,301,302],{"class":121},"sp[i];",[86,304,305],{"class":110},"          // 下标访问\n",[86,307,309,311,314,316],{"class":88,"line":308},12,[86,310,275],{"class":121},[86,312,313],{"class":117},"front",[86,315,280],{"class":121},[86,317,318],{"class":110},"     // 第一个元素\n",[86,320,322,324,327,329],{"class":88,"line":321},13,[86,323,275],{"class":121},[86,325,326],{"class":117},"back",[86,328,280],{"class":121},[86,330,331],{"class":110},"      // 最后一个元素\n",[86,333,335,337,340,342],{"class":88,"line":334},14,[86,336,275],{"class":121},[86,338,339],{"class":117},"data",[86,341,280],{"class":121},[86,343,344],{"class":110},"      // 底层指针\n",[86,346,348,350,353,356],{"class":88,"line":347},15,[86,349,275],{"class":121},[86,351,352],{"class":117},"subspan",[86,354,355],{"class":121},"(pos, count);",[86,357,358],{"class":110},"  // 子视图\n",[86,360,362,364,367,370],{"class":88,"line":361},16,[86,363,275],{"class":121},[86,365,366],{"class":117},"first",[86,368,369],{"class":121},"(n);",[86,371,372],{"class":110},"    // 前 n 个元素的子视图\n",[86,374,376,378,381,383],{"class":88,"line":375},17,[86,377,275],{"class":121},[86,379,380],{"class":117},"last",[86,382,369],{"class":121},[86,384,385],{"class":110},"     // 后 n 个元素的子视图\n",[10,387,388],{"id":388},"常用用法",[390,391,392,406],"table",{},[393,394,395],"thead",{},[396,397,398,403],"tr",{},[399,400,402],"th",{"align":401},"left","用法",[399,404,405],{"align":401},"说明",[407,408,409,420,430,440],"tbody",{},[396,410,411,417],{},[412,413,414],"td",{"align":401},[28,415,416],{},"void f(std::span\u003Cconst int> data)",[412,418,419],{"align":401},"接收任何连续 int 容器",[396,421,422,427],{},[412,423,424],{"align":401},[28,425,426],{},"std::span\u003Cint>(vec)",[412,428,429],{"align":401},"从 vector 创建",[396,431,432,437],{},[412,433,434],{"align":401},[28,435,436],{},"std::span\u003Cint>(arr)",[412,438,439],{"align":401},"从 C 数组创建",[396,441,442,447],{},[412,443,444],{"align":401},[28,445,446],{},"sp.subspan(offset, count)",[412,448,449],{"align":401},"创建子视图（无拷贝）",[10,451,452],{"id":452},"示例代码",[454,455,457],"h3",{"id":456},"示例-1用-span-统一接收不同容器类型","示例 1：用 span 统一接收不同容器类型",[77,459,461],{"className":79,"code":460,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Cspan>\n#include \u003Cvector>\n#include \u003Carray>\n\n// 一个函数处理所有类型的连续 int 数据\nvoid print_data(std::span\u003Cconst int> data)\n{\n    std::cout \u003C\u003C \"size = \" \u003C\u003C data.size() \u003C\u003C \": \";\n    for (int n : data)\n    {\n        std::cout \u003C\u003C n \u003C\u003C \" \";\n    }\n    std::cout \u003C\u003C \"\\n\";\n}\n\nint main()\n{\n    int c_arr[] = {1, 2, 3, 4, 5};              // C 数组\n    std::vector\u003Cint> vec = {10, 20, 30};         // vector\n    std::array\u003Cint, 4> arr = {100, 200, 300, 400};  // std::array\n\n    print_data(c_arr);   // ✅ C 数组\n    print_data(vec);      // ✅ vector\n    print_data(arr);      // ✅ std::array\n\n    return 0;\n}\n",[28,462,463,470,476,483,490,494,499,531,536,569,583,588,607,612,632,637,641,651,656,700,736,783,788,800,811,822,827,838],{"__ignoreMap":82},[86,464,465,467],{"class":88,"line":89},[86,466,93],{"class":92},[86,468,469],{"class":96}," \u003Ciostream>\n",[86,471,472,474],{"class":88,"line":114},[86,473,93],{"class":92},[86,475,97],{"class":96},[86,477,478,480],{"class":88,"line":140},[86,479,93],{"class":92},[86,481,482],{"class":96}," \u003Cvector>\n",[86,484,485,487],{"class":88,"line":178},[86,486,93],{"class":92},[86,488,489],{"class":96}," \u003Carray>\n",[86,491,492],{"class":88,"line":205},[86,493,263],{"emptyLinePlaceholder":262},[86,495,496],{"class":88,"line":232},[86,497,498],{"class":110},"// 一个函数处理所有类型的连续 int 数据\n",[86,500,501,504,507,509,511,513,515,517,520,523,525,528],{"class":88,"line":259},[86,502,503],{"class":92},"void",[86,505,506],{"class":117}," print_data",[86,508,160],{"class":121},[86,510,118],{"class":117},[86,512,145],{"class":121},[86,514,86],{"class":117},[86,516,125],{"class":121},[86,518,519],{"class":92},"const",[86,521,522],{"class":92}," int",[86,524,154],{"class":121},[86,526,339],{"class":527},"s4XuR",[86,529,530],{"class":121},")\n",[86,532,533],{"class":88,"line":266},[86,534,535],{"class":121},"{\n",[86,537,538,541,544,547,550,553,556,558,561,563,566],{"class":88,"line":272},[86,539,540],{"class":117},"    std",[86,542,543],{"class":121},"::cout ",[86,545,546],{"class":92},"\u003C\u003C",[86,548,549],{"class":96}," \"size = \"",[86,551,552],{"class":92}," \u003C\u003C",[86,554,555],{"class":121}," data.",[86,557,169],{"class":117},[86,559,560],{"class":121},"() ",[86,562,546],{"class":92},[86,564,565],{"class":96}," \": \"",[86,567,568],{"class":121},";\n",[86,570,571,574,577,580],{"class":88,"line":286},[86,572,573],{"class":92},"    for",[86,575,576],{"class":121}," (",[86,578,579],{"class":92},"int",[86,581,582],{"class":121}," n : data)\n",[86,584,585],{"class":88,"line":299},[86,586,587],{"class":121},"    {\n",[86,589,590,593,595,597,600,602,605],{"class":88,"line":308},[86,591,592],{"class":117},"        std",[86,594,543],{"class":121},[86,596,546],{"class":92},[86,598,599],{"class":121}," n ",[86,601,546],{"class":92},[86,603,604],{"class":96}," \" \"",[86,606,568],{"class":121},[86,608,609],{"class":88,"line":321},[86,610,611],{"class":121},"    }\n",[86,613,614,616,618,620,623,627,630],{"class":88,"line":334},[86,615,540],{"class":117},[86,617,543],{"class":121},[86,619,546],{"class":92},[86,621,622],{"class":96}," \"",[86,624,626],{"class":625},"sj4cs","\\n",[86,628,629],{"class":96},"\"",[86,631,568],{"class":121},[86,633,634],{"class":88,"line":347},[86,635,636],{"class":121},"}\n",[86,638,639],{"class":88,"line":361},[86,640,263],{"emptyLinePlaceholder":262},[86,642,643,645,648],{"class":88,"line":375},[86,644,579],{"class":92},[86,646,647],{"class":117}," main",[86,649,650],{"class":121},"()\n",[86,652,654],{"class":88,"line":653},18,[86,655,535],{"class":121},[86,657,659,662,665,668,671,674,676,679,681,684,686,689,691,694,697],{"class":88,"line":658},19,[86,660,661],{"class":92},"    int",[86,663,664],{"class":121}," c_arr[] ",[86,666,667],{"class":92},"=",[86,669,670],{"class":121}," {",[86,672,673],{"class":625},"1",[86,675,166],{"class":121},[86,677,678],{"class":625},"2",[86,680,166],{"class":121},[86,682,683],{"class":625},"3",[86,685,166],{"class":121},[86,687,688],{"class":625},"4",[86,690,166],{"class":121},[86,692,693],{"class":625},"5",[86,695,696],{"class":121},"};",[86,698,699],{"class":110},"              // C 数组\n",[86,701,703,705,708,711,714,716,718,721,723,726,728,731,733],{"class":88,"line":702},20,[86,704,540],{"class":117},[86,706,707],{"class":121},"::vector",[86,709,710],{"class":92},"\u003Cint>",[86,712,713],{"class":121}," vec ",[86,715,667],{"class":92},[86,717,670],{"class":121},[86,719,720],{"class":625},"10",[86,722,166],{"class":121},[86,724,725],{"class":625},"20",[86,727,166],{"class":121},[86,729,730],{"class":625},"30",[86,732,696],{"class":121},[86,734,735],{"class":110},"         // vector\n",[86,737,739,741,744,747,749,751,753,756,758,760,763,765,768,770,773,775,778,780],{"class":88,"line":738},21,[86,740,540],{"class":117},[86,742,743],{"class":121},"::array",[86,745,746],{"class":92},"\u003Cint",[86,748,166],{"class":121},[86,750,688],{"class":625},[86,752,131],{"class":92},[86,754,755],{"class":121}," arr ",[86,757,667],{"class":92},[86,759,670],{"class":121},[86,761,762],{"class":625},"100",[86,764,166],{"class":121},[86,766,767],{"class":625},"200",[86,769,166],{"class":121},[86,771,772],{"class":625},"300",[86,774,166],{"class":121},[86,776,777],{"class":625},"400",[86,779,696],{"class":121},[86,781,782],{"class":110},"  // std::array\n",[86,784,786],{"class":88,"line":785},22,[86,787,263],{"emptyLinePlaceholder":262},[86,789,791,794,797],{"class":88,"line":790},23,[86,792,793],{"class":117},"    print_data",[86,795,796],{"class":121},"(c_arr);",[86,798,799],{"class":110},"   // ✅ C 数组\n",[86,801,803,805,808],{"class":88,"line":802},24,[86,804,793],{"class":117},[86,806,807],{"class":121},"(vec);",[86,809,810],{"class":110},"      // ✅ vector\n",[86,812,814,816,819],{"class":88,"line":813},25,[86,815,793],{"class":117},[86,817,818],{"class":121},"(arr);",[86,820,821],{"class":110},"      // ✅ std::array\n",[86,823,825],{"class":88,"line":824},26,[86,826,263],{"emptyLinePlaceholder":262},[86,828,830,833,836],{"class":88,"line":829},27,[86,831,832],{"class":92},"    return",[86,834,835],{"class":625}," 0",[86,837,568],{"class":121},[86,839,841],{"class":88,"line":840},28,[86,842,636],{"class":121},[14,844,845,848],{},[24,846,847],{},"运行结果","：",[77,850,855],{"className":851,"code":853,"language":854},[852],"language-text","size = 5: 1 2 3 4 5 \nsize = 3: 10 20 30 \nsize = 4: 100 200 300 400 \n","text",[28,856,853],{"__ignoreMap":82},[454,858,860],{"id":859},"示例-2在示例-1-基础上span-的子视图subspan","示例 2：在示例 1 基础上，span 的子视图（subspan）",[77,862,864],{"className":79,"code":863,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Cspan>\n#include \u003Cvector>\n\nint main()\n{\n    std::vector\u003Cint> vec = {10, 20, 30, 40, 50, 60};\n\n    std::span\u003Cint> sp(vec);\n\n    // 取中间 3 个元素（从索引 1 开始，取 3 个）\n    auto mid = sp.subspan(1, 3);\n    std::cout \u003C\u003C \"mid: \";\n    for (int n : mid) std::cout \u003C\u003C n \u003C\u003C \" \";\n    std::cout \u003C\u003C \"\\n\";\n\n    // 取前 2 个\n    auto first2 = sp.first(2);\n    std::cout \u003C\u003C \"first 2: \";\n    for (int n : first2) std::cout \u003C\u003C n \u003C\u003C \" \";\n    std::cout \u003C\u003C \"\\n\";\n\n    // 取后 3 个\n    auto last3 = sp.last(3);\n    std::cout \u003C\u003C \"last 3: \";\n    for (int n : last3) std::cout \u003C\u003C n \u003C\u003C \" \";\n    std::cout \u003C\u003C \"\\n\";\n\n    // 子视图修改会影响原数据！\n    mid[0] = 999;\n    std::cout \u003C\u003C \"after modifying mid[0] = 999\\n\";\n    std::cout \u003C\u003C \"original vec[1] = \" \u003C\u003C vec[1] \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[28,865,866,872,878,884,888,896,900,942,946,960,964,969,995,1008,1033,1049,1053,1058,1077,1090,1115,1131,1135,1140,1159,1172,1197,1213,1217,1223,1242,1260,1291,1296,1305],{"__ignoreMap":82},[86,867,868,870],{"class":88,"line":89},[86,869,93],{"class":92},[86,871,469],{"class":96},[86,873,874,876],{"class":88,"line":114},[86,875,93],{"class":92},[86,877,97],{"class":96},[86,879,880,882],{"class":88,"line":140},[86,881,93],{"class":92},[86,883,482],{"class":96},[86,885,886],{"class":88,"line":178},[86,887,263],{"emptyLinePlaceholder":262},[86,889,890,892,894],{"class":88,"line":205},[86,891,579],{"class":92},[86,893,647],{"class":117},[86,895,650],{"class":121},[86,897,898],{"class":88,"line":232},[86,899,535],{"class":121},[86,901,902,904,906,908,910,912,914,916,918,920,922,924,926,929,931,934,936,939],{"class":88,"line":259},[86,903,540],{"class":117},[86,905,707],{"class":121},[86,907,710],{"class":92},[86,909,713],{"class":121},[86,911,667],{"class":92},[86,913,670],{"class":121},[86,915,720],{"class":625},[86,917,166],{"class":121},[86,919,725],{"class":625},[86,921,166],{"class":121},[86,923,730],{"class":625},[86,925,166],{"class":121},[86,927,928],{"class":625},"40",[86,930,166],{"class":121},[86,932,933],{"class":625},"50",[86,935,166],{"class":121},[86,937,938],{"class":625},"60",[86,940,941],{"class":121},"};\n",[86,943,944],{"class":88,"line":266},[86,945,263],{"emptyLinePlaceholder":262},[86,947,948,950,952,954,957],{"class":88,"line":272},[86,949,540],{"class":117},[86,951,122],{"class":121},[86,953,710],{"class":92},[86,955,956],{"class":117}," sp",[86,958,959],{"class":121},"(vec);\n",[86,961,962],{"class":88,"line":286},[86,963,263],{"emptyLinePlaceholder":262},[86,965,966],{"class":88,"line":299},[86,967,968],{"class":110},"    // 取中间 3 个元素（从索引 1 开始，取 3 个）\n",[86,970,971,974,977,979,982,984,986,988,990,992],{"class":88,"line":308},[86,972,973],{"class":92},"    auto",[86,975,976],{"class":121}," mid ",[86,978,667],{"class":92},[86,980,981],{"class":121}," sp.",[86,983,352],{"class":117},[86,985,160],{"class":121},[86,987,673],{"class":625},[86,989,166],{"class":121},[86,991,683],{"class":625},[86,993,994],{"class":121},");\n",[86,996,997,999,1001,1003,1006],{"class":88,"line":321},[86,998,540],{"class":117},[86,1000,543],{"class":121},[86,1002,546],{"class":92},[86,1004,1005],{"class":96}," \"mid: \"",[86,1007,568],{"class":121},[86,1009,1010,1012,1014,1016,1019,1021,1023,1025,1027,1029,1031],{"class":88,"line":334},[86,1011,573],{"class":92},[86,1013,576],{"class":121},[86,1015,579],{"class":92},[86,1017,1018],{"class":121}," n : mid) ",[86,1020,118],{"class":117},[86,1022,543],{"class":121},[86,1024,546],{"class":92},[86,1026,599],{"class":121},[86,1028,546],{"class":92},[86,1030,604],{"class":96},[86,1032,568],{"class":121},[86,1034,1035,1037,1039,1041,1043,1045,1047],{"class":88,"line":347},[86,1036,540],{"class":117},[86,1038,543],{"class":121},[86,1040,546],{"class":92},[86,1042,622],{"class":96},[86,1044,626],{"class":625},[86,1046,629],{"class":96},[86,1048,568],{"class":121},[86,1050,1051],{"class":88,"line":361},[86,1052,263],{"emptyLinePlaceholder":262},[86,1054,1055],{"class":88,"line":375},[86,1056,1057],{"class":110},"    // 取前 2 个\n",[86,1059,1060,1062,1065,1067,1069,1071,1073,1075],{"class":88,"line":653},[86,1061,973],{"class":92},[86,1063,1064],{"class":121}," first2 ",[86,1066,667],{"class":92},[86,1068,981],{"class":121},[86,1070,366],{"class":117},[86,1072,160],{"class":121},[86,1074,678],{"class":625},[86,1076,994],{"class":121},[86,1078,1079,1081,1083,1085,1088],{"class":88,"line":658},[86,1080,540],{"class":117},[86,1082,543],{"class":121},[86,1084,546],{"class":92},[86,1086,1087],{"class":96}," \"first 2: \"",[86,1089,568],{"class":121},[86,1091,1092,1094,1096,1098,1101,1103,1105,1107,1109,1111,1113],{"class":88,"line":702},[86,1093,573],{"class":92},[86,1095,576],{"class":121},[86,1097,579],{"class":92},[86,1099,1100],{"class":121}," n : first2) ",[86,1102,118],{"class":117},[86,1104,543],{"class":121},[86,1106,546],{"class":92},[86,1108,599],{"class":121},[86,1110,546],{"class":92},[86,1112,604],{"class":96},[86,1114,568],{"class":121},[86,1116,1117,1119,1121,1123,1125,1127,1129],{"class":88,"line":738},[86,1118,540],{"class":117},[86,1120,543],{"class":121},[86,1122,546],{"class":92},[86,1124,622],{"class":96},[86,1126,626],{"class":625},[86,1128,629],{"class":96},[86,1130,568],{"class":121},[86,1132,1133],{"class":88,"line":785},[86,1134,263],{"emptyLinePlaceholder":262},[86,1136,1137],{"class":88,"line":790},[86,1138,1139],{"class":110},"    // 取后 3 个\n",[86,1141,1142,1144,1147,1149,1151,1153,1155,1157],{"class":88,"line":802},[86,1143,973],{"class":92},[86,1145,1146],{"class":121}," last3 ",[86,1148,667],{"class":92},[86,1150,981],{"class":121},[86,1152,380],{"class":117},[86,1154,160],{"class":121},[86,1156,683],{"class":625},[86,1158,994],{"class":121},[86,1160,1161,1163,1165,1167,1170],{"class":88,"line":813},[86,1162,540],{"class":117},[86,1164,543],{"class":121},[86,1166,546],{"class":92},[86,1168,1169],{"class":96}," \"last 3: \"",[86,1171,568],{"class":121},[86,1173,1174,1176,1178,1180,1183,1185,1187,1189,1191,1193,1195],{"class":88,"line":824},[86,1175,573],{"class":92},[86,1177,576],{"class":121},[86,1179,579],{"class":92},[86,1181,1182],{"class":121}," n : last3) ",[86,1184,118],{"class":117},[86,1186,543],{"class":121},[86,1188,546],{"class":92},[86,1190,599],{"class":121},[86,1192,546],{"class":92},[86,1194,604],{"class":96},[86,1196,568],{"class":121},[86,1198,1199,1201,1203,1205,1207,1209,1211],{"class":88,"line":829},[86,1200,540],{"class":117},[86,1202,543],{"class":121},[86,1204,546],{"class":92},[86,1206,622],{"class":96},[86,1208,626],{"class":625},[86,1210,629],{"class":96},[86,1212,568],{"class":121},[86,1214,1215],{"class":88,"line":840},[86,1216,263],{"emptyLinePlaceholder":262},[86,1218,1220],{"class":88,"line":1219},29,[86,1221,1222],{"class":110},"    // 子视图修改会影响原数据！\n",[86,1224,1226,1229,1232,1235,1237,1240],{"class":88,"line":1225},30,[86,1227,1228],{"class":121},"    mid[",[86,1230,1231],{"class":625},"0",[86,1233,1234],{"class":121},"] ",[86,1236,667],{"class":92},[86,1238,1239],{"class":625}," 999",[86,1241,568],{"class":121},[86,1243,1245,1247,1249,1251,1254,1256,1258],{"class":88,"line":1244},31,[86,1246,540],{"class":117},[86,1248,543],{"class":121},[86,1250,546],{"class":92},[86,1252,1253],{"class":96}," \"after modifying mid[0] = 999",[86,1255,626],{"class":625},[86,1257,629],{"class":96},[86,1259,568],{"class":121},[86,1261,1263,1265,1267,1269,1272,1274,1277,1279,1281,1283,1285,1287,1289],{"class":88,"line":1262},32,[86,1264,540],{"class":117},[86,1266,543],{"class":121},[86,1268,546],{"class":92},[86,1270,1271],{"class":96}," \"original vec[1] = \"",[86,1273,552],{"class":92},[86,1275,1276],{"class":121}," vec[",[86,1278,673],{"class":625},[86,1280,1234],{"class":121},[86,1282,546],{"class":92},[86,1284,622],{"class":96},[86,1286,626],{"class":625},[86,1288,629],{"class":96},[86,1290,568],{"class":121},[86,1292,1294],{"class":88,"line":1293},33,[86,1295,263],{"emptyLinePlaceholder":262},[86,1297,1299,1301,1303],{"class":88,"line":1298},34,[86,1300,832],{"class":92},[86,1302,835],{"class":625},[86,1304,568],{"class":121},[86,1306,1308],{"class":88,"line":1307},35,[86,1309,636],{"class":121},[14,1311,1312,848],{},[24,1313,847],{},[77,1315,1318],{"className":1316,"code":1317,"language":854},[852],"mid: 20 30 40 \nfirst 2: 10 20 \nlast 3: 40 50 60 \nafter modifying mid[0] = 999\noriginal vec[1] = 999\n",[28,1319,1317],{"__ignoreMap":82},[454,1321,1323],{"id":1322},"示例-3在示例-2-基础上写一个求和的函数","示例 3：在示例 2 基础上，写一个求和的函数",[77,1325,1327],{"className":79,"code":1326,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Cspan>\n#include \u003Cvector>\n\n// 计算 span 中所有元素的和\ndouble sum(std::span\u003Cconst double> data)\n{\n    double total = 0.0;\n    for (double x : data)\n    {\n        total += x;\n    }\n    return total;\n}\n\n// 计算 span 中所有元素的平均值\ndouble average(std::span\u003Cconst double> data)\n{\n    if (data.empty()) return 0.0;\n    return sum(data) / data.size();\n}\n\nint main()\n{\n    std::vector\u003Cdouble> scores = {85.5, 92.0, 78.5, 90.0, 88.0};\n    double c_arr[] = {1.1, 2.2, 3.3};\n\n    std::cout \u003C\u003C \"sum(scores) = \" \u003C\u003C sum(scores) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"avg(scores) = \" \u003C\u003C average(scores) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"sum(c_arr) = \" \u003C\u003C sum(c_arr) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"avg(c_arr) = \" \u003C\u003C average(c_arr) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[28,1328,1329,1335,1341,1347,1351,1356,1385,1389,1404,1415,1419,1430,1434,1441,1445,1449,1454,1481,1485,1505,1524,1528,1532,1540,1544,1585,1610,1614,1642,1669,1697,1724,1728,1736],{"__ignoreMap":82},[86,1330,1331,1333],{"class":88,"line":89},[86,1332,93],{"class":92},[86,1334,469],{"class":96},[86,1336,1337,1339],{"class":88,"line":114},[86,1338,93],{"class":92},[86,1340,97],{"class":96},[86,1342,1343,1345],{"class":88,"line":140},[86,1344,93],{"class":92},[86,1346,482],{"class":96},[86,1348,1349],{"class":88,"line":178},[86,1350,263],{"emptyLinePlaceholder":262},[86,1352,1353],{"class":88,"line":205},[86,1354,1355],{"class":110},"// 计算 span 中所有元素的和\n",[86,1357,1358,1361,1364,1366,1368,1370,1372,1374,1376,1379,1381,1383],{"class":88,"line":232},[86,1359,1360],{"class":92},"double",[86,1362,1363],{"class":117}," sum",[86,1365,160],{"class":121},[86,1367,118],{"class":117},[86,1369,145],{"class":121},[86,1371,86],{"class":117},[86,1373,125],{"class":121},[86,1375,519],{"class":92},[86,1377,1378],{"class":92}," double",[86,1380,154],{"class":121},[86,1382,339],{"class":527},[86,1384,530],{"class":121},[86,1386,1387],{"class":88,"line":259},[86,1388,535],{"class":121},[86,1390,1391,1394,1397,1399,1402],{"class":88,"line":266},[86,1392,1393],{"class":92},"    double",[86,1395,1396],{"class":121}," total ",[86,1398,667],{"class":92},[86,1400,1401],{"class":625}," 0.0",[86,1403,568],{"class":121},[86,1405,1406,1408,1410,1412],{"class":88,"line":272},[86,1407,573],{"class":92},[86,1409,576],{"class":121},[86,1411,1360],{"class":92},[86,1413,1414],{"class":121}," x : data)\n",[86,1416,1417],{"class":88,"line":286},[86,1418,587],{"class":121},[86,1420,1421,1424,1427],{"class":88,"line":299},[86,1422,1423],{"class":121},"        total ",[86,1425,1426],{"class":92},"+=",[86,1428,1429],{"class":121}," x;\n",[86,1431,1432],{"class":88,"line":308},[86,1433,611],{"class":121},[86,1435,1436,1438],{"class":88,"line":321},[86,1437,832],{"class":92},[86,1439,1440],{"class":121}," total;\n",[86,1442,1443],{"class":88,"line":334},[86,1444,636],{"class":121},[86,1446,1447],{"class":88,"line":347},[86,1448,263],{"emptyLinePlaceholder":262},[86,1450,1451],{"class":88,"line":361},[86,1452,1453],{"class":110},"// 计算 span 中所有元素的平均值\n",[86,1455,1456,1458,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479],{"class":88,"line":375},[86,1457,1360],{"class":92},[86,1459,1460],{"class":117}," average",[86,1462,160],{"class":121},[86,1464,118],{"class":117},[86,1466,145],{"class":121},[86,1468,86],{"class":117},[86,1470,125],{"class":121},[86,1472,519],{"class":92},[86,1474,1378],{"class":92},[86,1476,154],{"class":121},[86,1478,339],{"class":527},[86,1480,530],{"class":121},[86,1482,1483],{"class":88,"line":653},[86,1484,535],{"class":121},[86,1486,1487,1490,1493,1495,1498,1501,1503],{"class":88,"line":658},[86,1488,1489],{"class":92},"    if",[86,1491,1492],{"class":121}," (data.",[86,1494,291],{"class":117},[86,1496,1497],{"class":121},"()) ",[86,1499,1500],{"class":92},"return",[86,1502,1401],{"class":625},[86,1504,568],{"class":121},[86,1506,1507,1509,1511,1514,1517,1519,1521],{"class":88,"line":702},[86,1508,832],{"class":92},[86,1510,1363],{"class":117},[86,1512,1513],{"class":121},"(data) ",[86,1515,1516],{"class":92},"/",[86,1518,555],{"class":121},[86,1520,169],{"class":117},[86,1522,1523],{"class":121},"();\n",[86,1525,1526],{"class":88,"line":738},[86,1527,636],{"class":121},[86,1529,1530],{"class":88,"line":785},[86,1531,263],{"emptyLinePlaceholder":262},[86,1533,1534,1536,1538],{"class":88,"line":790},[86,1535,579],{"class":92},[86,1537,647],{"class":117},[86,1539,650],{"class":121},[86,1541,1542],{"class":88,"line":802},[86,1543,535],{"class":121},[86,1545,1546,1548,1550,1553,1556,1558,1560,1563,1565,1568,1570,1573,1575,1578,1580,1583],{"class":88,"line":813},[86,1547,540],{"class":117},[86,1549,707],{"class":121},[86,1551,1552],{"class":92},"\u003Cdouble>",[86,1554,1555],{"class":121}," scores ",[86,1557,667],{"class":92},[86,1559,670],{"class":121},[86,1561,1562],{"class":625},"85.5",[86,1564,166],{"class":121},[86,1566,1567],{"class":625},"92.0",[86,1569,166],{"class":121},[86,1571,1572],{"class":625},"78.5",[86,1574,166],{"class":121},[86,1576,1577],{"class":625},"90.0",[86,1579,166],{"class":121},[86,1581,1582],{"class":625},"88.0",[86,1584,941],{"class":121},[86,1586,1587,1589,1591,1593,1595,1598,1600,1603,1605,1608],{"class":88,"line":824},[86,1588,1393],{"class":92},[86,1590,664],{"class":121},[86,1592,667],{"class":92},[86,1594,670],{"class":121},[86,1596,1597],{"class":625},"1.1",[86,1599,166],{"class":121},[86,1601,1602],{"class":625},"2.2",[86,1604,166],{"class":121},[86,1606,1607],{"class":625},"3.3",[86,1609,941],{"class":121},[86,1611,1612],{"class":88,"line":829},[86,1613,263],{"emptyLinePlaceholder":262},[86,1615,1616,1618,1620,1622,1625,1627,1629,1632,1634,1636,1638,1640],{"class":88,"line":840},[86,1617,540],{"class":117},[86,1619,543],{"class":121},[86,1621,546],{"class":92},[86,1623,1624],{"class":96}," \"sum(scores) = \"",[86,1626,552],{"class":92},[86,1628,1363],{"class":117},[86,1630,1631],{"class":121},"(scores) ",[86,1633,546],{"class":92},[86,1635,622],{"class":96},[86,1637,626],{"class":625},[86,1639,629],{"class":96},[86,1641,568],{"class":121},[86,1643,1644,1646,1648,1650,1653,1655,1657,1659,1661,1663,1665,1667],{"class":88,"line":1219},[86,1645,540],{"class":117},[86,1647,543],{"class":121},[86,1649,546],{"class":92},[86,1651,1652],{"class":96}," \"avg(scores) = \"",[86,1654,552],{"class":92},[86,1656,1460],{"class":117},[86,1658,1631],{"class":121},[86,1660,546],{"class":92},[86,1662,622],{"class":96},[86,1664,626],{"class":625},[86,1666,629],{"class":96},[86,1668,568],{"class":121},[86,1670,1671,1673,1675,1677,1680,1682,1684,1687,1689,1691,1693,1695],{"class":88,"line":1225},[86,1672,540],{"class":117},[86,1674,543],{"class":121},[86,1676,546],{"class":92},[86,1678,1679],{"class":96}," \"sum(c_arr) = \"",[86,1681,552],{"class":92},[86,1683,1363],{"class":117},[86,1685,1686],{"class":121},"(c_arr) ",[86,1688,546],{"class":92},[86,1690,622],{"class":96},[86,1692,626],{"class":625},[86,1694,629],{"class":96},[86,1696,568],{"class":121},[86,1698,1699,1701,1703,1705,1708,1710,1712,1714,1716,1718,1720,1722],{"class":88,"line":1244},[86,1700,540],{"class":117},[86,1702,543],{"class":121},[86,1704,546],{"class":92},[86,1706,1707],{"class":96}," \"avg(c_arr) = \"",[86,1709,552],{"class":92},[86,1711,1460],{"class":117},[86,1713,1686],{"class":121},[86,1715,546],{"class":92},[86,1717,622],{"class":96},[86,1719,626],{"class":625},[86,1721,629],{"class":96},[86,1723,568],{"class":121},[86,1725,1726],{"class":88,"line":1262},[86,1727,263],{"emptyLinePlaceholder":262},[86,1729,1730,1732,1734],{"class":88,"line":1293},[86,1731,832],{"class":92},[86,1733,835],{"class":625},[86,1735,568],{"class":121},[86,1737,1738],{"class":88,"line":1298},[86,1739,636],{"class":121},[14,1741,1742,848],{},[24,1743,847],{},[77,1745,1748],{"className":1746,"code":1747,"language":854},[852],"sum(scores) = 434\navg(scores) = 86.8\nsum(c_arr) = 6.6\navg(c_arr) = 2.2\n",[28,1749,1747],{"__ignoreMap":82},[10,1751,847],{"id":847},[14,1753,1754],{},"见上方每个示例的\"运行结果\"。",[10,1756,1757],{"id":1757},"示例中的关键语法解释",[390,1759,1760,1779],{},[393,1761,1762],{},[396,1763,1764,1767,1770,1773,1776],{},[399,1765,1766],{"align":401},"示例",[399,1768,1769],{"align":401},"讲了什么",[399,1771,1772],{"align":401},"新出现的语法",[399,1774,1775],{"align":401},"为什么这样写",[399,1777,1778],{"align":401},"注意事项",[407,1780,1781,1801,1827],{},[396,1782,1783,1786,1789,1795,1798],{},[412,1784,1785],{"align":401},"示例 1",[412,1787,1788],{"align":401},"统一接收不同容器",[412,1790,1791,1794],{"align":401},[28,1792,1793],{},"std::span\u003Cconst int>"," 作为参数",[412,1796,1797],{"align":401},"一个函数处理 vector/array/C 数组",[412,1799,1800],{"align":401},"span 只是视图，不拥有数据",[396,1802,1803,1806,1809,1821,1824],{},[412,1804,1805],{"align":401},"示例 2",[412,1807,1808],{"align":401},"子视图操作",[412,1810,1811,1814,1815,1814,1818],{"align":401},[28,1812,1813],{},"subspan()","、",[28,1816,1817],{},"first()",[28,1819,1820],{},"last()",[412,1822,1823],{"align":401},"零拷贝切片，可以局部处理大数组",[412,1825,1826],{"align":401},"子视图修改影响原数据",[396,1828,1829,1832,1835,1840,1843],{},[412,1830,1831],{"align":401},"示例 3",[412,1833,1834],{"align":401},"用 span 写通用函数",[412,1836,1837],{"align":401},[28,1838,1839],{},"sum(std::span\u003Cconst double>)",[412,1841,1842],{"align":401},"通用算法 + 任意连续容器",[412,1844,1845],{"align":401},"函数内部用 range-for 和 .size() 即可",[10,1847,1849,1852,1853,1856],{"id":1848},"spanconst-t-和-spant-的区别",[28,1850,1851],{},"span\u003Cconst T>"," 和 ",[28,1854,1855],{},"span\u003CT>"," 的区别",[390,1858,1859,1872],{},[393,1860,1861],{},[396,1862,1863,1866,1869],{},[399,1864,1865],{"align":401},"写法",[399,1867,1868],{"align":401},"能否修改底层数据",[399,1870,1871],{"align":401},"常见用途",[407,1873,1874,1887],{},[396,1875,1876,1881,1884],{},[412,1877,1878],{"align":401},[28,1879,1880],{},"std::span\u003Cconst T>",[412,1882,1883],{"align":401},"不能修改",[412,1885,1886],{"align":401},"只读处理、统计、打印、校验",[396,1888,1889,1893,1896],{},[412,1890,1891],{"align":401},[28,1892,56],{},[412,1894,1895],{"align":401},"可以修改",[412,1897,1898],{"align":401},"填充缓冲区、归一化数据、原地滤波",[14,1900,1901,1903,1904,1906,1907,1909],{},[28,1902,86],{}," 不拥有数据，所以“是否 const”非常重要。函数参数默认优先写 ",[28,1905,1880],{},"，只有明确要修改原数据时才写 ",[28,1908,56],{},"。",[454,1911,1913],{"id":1912},"示例-4只读-span-和可写-span","示例 4：只读 span 和可写 span",[77,1915,1917],{"className":79,"code":1916,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Cspan>\n#include \u003Cvector>\n\nvoid print(std::span\u003Cconst int> data)\n{\n    for (int n : data)\n    {\n        std::cout \u003C\u003C n \u003C\u003C \" \";\n    }\n    std::cout \u003C\u003C \"\\n\";\n}\n\nvoid add_offset(std::span\u003Cint> data, int offset)\n{\n    for (int& n : data)\n    {\n        n += offset;\n    }\n}\n\nint main()\n{\n    // 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    // vector 是动态数组，元素数量可以在运行时变化。\n    std::vector\u003Cint> values = {10, 20, 30};\n\n    print(values);\n    add_offset(values, 5);\n    print(values);\n\n    return 0;\n}\n",[28,1918,1919,1925,1931,1937,1941,1968,1972,1982,1986,2002,2006,2022,2026,2030,2062,2066,2077,2081,2091,2095,2099,2103,2111,2115,2120,2125,2152,2156,2164,2176,2182,2186,2194],{"__ignoreMap":82},[86,1920,1921,1923],{"class":88,"line":89},[86,1922,93],{"class":92},[86,1924,469],{"class":96},[86,1926,1927,1929],{"class":88,"line":114},[86,1928,93],{"class":92},[86,1930,97],{"class":96},[86,1932,1933,1935],{"class":88,"line":140},[86,1934,93],{"class":92},[86,1936,482],{"class":96},[86,1938,1939],{"class":88,"line":178},[86,1940,263],{"emptyLinePlaceholder":262},[86,1942,1943,1945,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966],{"class":88,"line":205},[86,1944,503],{"class":92},[86,1946,1947],{"class":117}," print",[86,1949,160],{"class":121},[86,1951,118],{"class":117},[86,1953,145],{"class":121},[86,1955,86],{"class":117},[86,1957,125],{"class":121},[86,1959,519],{"class":92},[86,1961,522],{"class":92},[86,1963,154],{"class":121},[86,1965,339],{"class":527},[86,1967,530],{"class":121},[86,1969,1970],{"class":88,"line":232},[86,1971,535],{"class":121},[86,1973,1974,1976,1978,1980],{"class":88,"line":259},[86,1975,573],{"class":92},[86,1977,576],{"class":121},[86,1979,579],{"class":92},[86,1981,582],{"class":121},[86,1983,1984],{"class":88,"line":266},[86,1985,587],{"class":121},[86,1987,1988,1990,1992,1994,1996,1998,2000],{"class":88,"line":272},[86,1989,592],{"class":117},[86,1991,543],{"class":121},[86,1993,546],{"class":92},[86,1995,599],{"class":121},[86,1997,546],{"class":92},[86,1999,604],{"class":96},[86,2001,568],{"class":121},[86,2003,2004],{"class":88,"line":286},[86,2005,611],{"class":121},[86,2007,2008,2010,2012,2014,2016,2018,2020],{"class":88,"line":299},[86,2009,540],{"class":117},[86,2011,543],{"class":121},[86,2013,546],{"class":92},[86,2015,622],{"class":96},[86,2017,626],{"class":625},[86,2019,629],{"class":96},[86,2021,568],{"class":121},[86,2023,2024],{"class":88,"line":308},[86,2025,636],{"class":121},[86,2027,2028],{"class":88,"line":321},[86,2029,263],{"emptyLinePlaceholder":262},[86,2031,2032,2034,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2060],{"class":88,"line":334},[86,2033,503],{"class":92},[86,2035,2036],{"class":117}," add_offset",[86,2038,160],{"class":121},[86,2040,118],{"class":117},[86,2042,145],{"class":121},[86,2044,86],{"class":117},[86,2046,125],{"class":121},[86,2048,579],{"class":92},[86,2050,154],{"class":121},[86,2052,339],{"class":527},[86,2054,166],{"class":121},[86,2056,579],{"class":92},[86,2058,2059],{"class":527}," offset",[86,2061,530],{"class":121},[86,2063,2064],{"class":88,"line":347},[86,2065,535],{"class":121},[86,2067,2068,2070,2072,2075],{"class":88,"line":361},[86,2069,573],{"class":92},[86,2071,576],{"class":121},[86,2073,2074],{"class":92},"int&",[86,2076,582],{"class":121},[86,2078,2079],{"class":88,"line":375},[86,2080,587],{"class":121},[86,2082,2083,2086,2088],{"class":88,"line":653},[86,2084,2085],{"class":121},"        n ",[86,2087,1426],{"class":92},[86,2089,2090],{"class":121}," offset;\n",[86,2092,2093],{"class":88,"line":658},[86,2094,611],{"class":121},[86,2096,2097],{"class":88,"line":702},[86,2098,636],{"class":121},[86,2100,2101],{"class":88,"line":738},[86,2102,263],{"emptyLinePlaceholder":262},[86,2104,2105,2107,2109],{"class":88,"line":785},[86,2106,579],{"class":92},[86,2108,647],{"class":117},[86,2110,650],{"class":121},[86,2112,2113],{"class":88,"line":790},[86,2114,535],{"class":121},[86,2116,2117],{"class":88,"line":802},[86,2118,2119],{"class":110},"    // 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[86,2121,2122],{"class":88,"line":813},[86,2123,2124],{"class":110},"    // vector 是动态数组，元素数量可以在运行时变化。\n",[86,2126,2127,2129,2131,2133,2136,2138,2140,2142,2144,2146,2148,2150],{"class":88,"line":824},[86,2128,540],{"class":117},[86,2130,707],{"class":121},[86,2132,710],{"class":92},[86,2134,2135],{"class":121}," values ",[86,2137,667],{"class":92},[86,2139,670],{"class":121},[86,2141,720],{"class":625},[86,2143,166],{"class":121},[86,2145,725],{"class":625},[86,2147,166],{"class":121},[86,2149,730],{"class":625},[86,2151,941],{"class":121},[86,2153,2154],{"class":88,"line":829},[86,2155,263],{"emptyLinePlaceholder":262},[86,2157,2158,2161],{"class":88,"line":840},[86,2159,2160],{"class":117},"    print",[86,2162,2163],{"class":121},"(values);\n",[86,2165,2166,2169,2172,2174],{"class":88,"line":1219},[86,2167,2168],{"class":117},"    add_offset",[86,2170,2171],{"class":121},"(values, ",[86,2173,693],{"class":625},[86,2175,994],{"class":121},[86,2177,2178,2180],{"class":88,"line":1225},[86,2179,2160],{"class":117},[86,2181,2163],{"class":121},[86,2183,2184],{"class":88,"line":1244},[86,2185,263],{"emptyLinePlaceholder":262},[86,2187,2188,2190,2192],{"class":88,"line":1262},[86,2189,832],{"class":92},[86,2191,835],{"class":625},[86,2193,568],{"class":121},[86,2195,2196],{"class":88,"line":1293},[86,2197,636],{"class":121},[14,2199,2200,848],{},[24,2201,847],{},[77,2203,2206],{"className":2204,"code":2205,"language":854},[852],"10 20 30\n15 25 35\n",[28,2207,2205],{"__ignoreMap":82},[14,2209,2210,2213,2214,2217,2218,2221,2222,2225,2226,2229,2230,2232],{},[28,2211,2212],{},"print"," 只读，所以用 ",[28,2215,2216],{},"span\u003Cconst int>","；",[28,2219,2220],{},"add_offset"," 要原地修改，所以用 ",[28,2223,2224],{},"span\u003Cint>","。这比传 ",[28,2227,2228],{},"vector\u003Cint>&"," 更通用，因为它也可以接收 ",[28,2231,224],{}," 和 C 数组。",[10,2234,2235],{"id":2235},"常见错误",[14,2237,2238],{},[24,2239,2240],{},"错误 1：span 比它引用的数据活得久",[77,2242,2244],{"className":79,"code":2243,"language":81,"meta":82,"style":82},"std::span\u003Cint> make_span()\n{\n    std::vector\u003Cint> v = {1, 2, 3};\n    return std::span\u003Cint>(v);  // ❌ v 是局部变量，span 成为悬挂视图！\n}\n",[28,2245,2246,2265,2269,2296,2317],{"__ignoreMap":82},[86,2247,2248,2250,2252,2254,2256,2258,2260,2263],{"class":88,"line":89},[86,2249,118],{"class":117},[86,2251,145],{"class":121},[86,2253,86],{"class":117},[86,2255,125],{"class":121},[86,2257,579],{"class":92},[86,2259,154],{"class":121},[86,2261,2262],{"class":117},"make_span",[86,2264,650],{"class":121},[86,2266,2267],{"class":88,"line":114},[86,2268,535],{"class":121},[86,2270,2271,2273,2275,2277,2280,2282,2284,2286,2288,2290,2292,2294],{"class":88,"line":140},[86,2272,540],{"class":117},[86,2274,707],{"class":121},[86,2276,710],{"class":92},[86,2278,2279],{"class":121}," v ",[86,2281,667],{"class":92},[86,2283,670],{"class":121},[86,2285,673],{"class":625},[86,2287,166],{"class":121},[86,2289,678],{"class":625},[86,2291,166],{"class":121},[86,2293,683],{"class":625},[86,2295,941],{"class":121},[86,2297,2298,2300,2303,2305,2307,2309,2311,2314],{"class":88,"line":178},[86,2299,832],{"class":92},[86,2301,2302],{"class":117}," std",[86,2304,145],{"class":121},[86,2306,86],{"class":117},[86,2308,125],{"class":121},[86,2310,579],{"class":92},[86,2312,2313],{"class":121},">(v);",[86,2315,2316],{"class":110},"  // ❌ v 是局部变量，span 成为悬挂视图！\n",[86,2318,2319],{"class":88,"line":205},[86,2320,636],{"class":121},[14,2322,2323],{},"正确做法：span 只是视图，必须确保底层数据比 span 活得久。",[14,2325,2326],{},[24,2327,2328],{},"错误 2：用 span 接收临时对象",[77,2330,2332],{"className":79,"code":2331,"language":81,"meta":82,"style":82},"std::span\u003Cconst int> sp = std::vector\u003Cint>{1, 2, 3};  // ❌ 临时对象已销毁！\n",[28,2333,2334],{"__ignoreMap":82},[86,2335,2336,2338,2340,2343,2346,2349,2351,2353,2355,2357,2360,2362,2364,2366,2368,2370,2372],{"class":88,"line":89},[86,2337,118],{"class":117},[86,2339,122],{"class":121},[86,2341,2342],{"class":92},"\u003Cconst",[86,2344,2345],{"class":92}," int>",[86,2347,2348],{"class":121}," sp ",[86,2350,667],{"class":92},[86,2352,2302],{"class":117},[86,2354,707],{"class":121},[86,2356,710],{"class":92},[86,2358,2359],{"class":121},"{",[86,2361,673],{"class":625},[86,2363,166],{"class":121},[86,2365,678],{"class":625},[86,2367,166],{"class":121},[86,2369,683],{"class":625},[86,2371,696],{"class":121},[86,2373,2374],{"class":110},"  // ❌ 临时对象已销毁！\n",[14,2376,2377],{},"正确做法：先创建具名的容器，再传给 span。",[14,2379,2380],{},[24,2381,2382],{},"错误 3：认为 span 可以用于不连续容器",[77,2384,2386],{"className":79,"code":2385,"language":81,"meta":82,"style":82},"std::list\u003Cint> lst = {1, 2, 3};\nstd::span\u003Cint> sp(lst);  // ❌ list 不连续！\n",[28,2387,2388,2416],{"__ignoreMap":82},[86,2389,2390,2392,2395,2397,2400,2402,2404,2406,2408,2410,2412,2414],{"class":88,"line":89},[86,2391,118],{"class":117},[86,2393,2394],{"class":121},"::list",[86,2396,710],{"class":92},[86,2398,2399],{"class":121}," lst ",[86,2401,667],{"class":92},[86,2403,670],{"class":121},[86,2405,673],{"class":625},[86,2407,166],{"class":121},[86,2409,678],{"class":625},[86,2411,166],{"class":121},[86,2413,683],{"class":625},[86,2415,941],{"class":121},[86,2417,2418,2420,2422,2424,2426,2428,2430,2432,2434,2437,2439],{"class":88,"line":114},[86,2419,118],{"class":117},[86,2421,145],{"class":121},[86,2423,86],{"class":117},[86,2425,125],{"class":121},[86,2427,579],{"class":92},[86,2429,154],{"class":121},[86,2431,157],{"class":117},[86,2433,160],{"class":121},[86,2435,2436],{"class":117},"lst",[86,2438,172],{"class":121},[86,2440,2441],{"class":110},"  // ❌ list 不连续！\n",[14,2443,2444],{},"正确做法：span 只适用于连续内存容器（vector、array、C 数组、deque 的部分场景）。",[10,2446,2447],{"id":2447},"使用建议",[18,2449,2450,2462,2468,2476,2486],{},[21,2451,2452,2457,2458,2461],{},[24,2453,2454,2455],{},"函数参数优先用 ",[28,2456,1880],{},"：代替 ",[28,2459,2460],{},"const vector\u003CT>&","，更通用。",[21,2463,2464,2467],{},[24,2465,2466],{},"span 只是视图","：不拥有数据，必须确保底层数据存活。",[21,2469,2470,848,2473,2475],{},[24,2471,2472],{},"子视图零拷贝",[28,2474,352],{}," 等操作非常高效。",[21,2477,2478,2481,2482,2485],{},[24,2479,2480],{},"C++20 才有 span","：如果你的项目用 C++17，可以用 ",[28,2483,2484],{},"std::string_view","（字符串版的 span）或第三方库。",[21,2487,2488,2493],{},[24,2489,2490,2491],{},"只读参数优先 ",[28,2492,1851],{},"：这样 vector、array、C 数组都能传，而且不会被函数修改。",[10,2495,2496],{"id":2496},"小结",[2498,2499,2500,2505,2508,2518,2521],"ul",{},[21,2501,2502,2504],{},[28,2503,56],{}," 是不拥有数据的连续内存视图。",[21,2506,2507],{},"可以统一接收 vector、array、C 数组——一个参数类型覆盖所有。",[21,2509,2510,2511,1814,2513,1814,2515,2517],{},"支持子视图切片（",[28,2512,352],{},[28,2514,366],{},[28,2516,380],{},"），零拷贝。",[21,2519,2520],{},"span 的生命周期不能超过底层数据。",[21,2522,2523],{},"只适用于连续内存容器。",[2525,2526,2527],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":82,"searchDepth":114,"depth":114,"links":2529},[2530,2531,2532,2533,2534,2535,2536,2541,2542,2543,2547,2548,2549],{"id":12,"depth":114,"text":12},{"id":51,"depth":114,"text":51},{"id":68,"depth":114,"text":69},{"id":75,"depth":114,"text":75},{"id":100,"depth":114,"text":100},{"id":388,"depth":114,"text":388},{"id":452,"depth":114,"text":452,"children":2537},[2538,2539,2540],{"id":456,"depth":140,"text":457},{"id":859,"depth":140,"text":860},{"id":1322,"depth":140,"text":1323},{"id":847,"depth":114,"text":847},{"id":1757,"depth":114,"text":1757},{"id":1848,"depth":114,"text":2544,"children":2545},"span\u003Cconst T> 和 span\u003CT> 的区别",[2546],{"id":1912,"depth":140,"text":1913},{"id":2235,"depth":114,"text":2235},{"id":2447,"depth":114,"text":2447},{"id":2496,"depth":114,"text":2496},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","18.16",18160000,"2023-10-05","wiki/2023-10-05-cplusplus-jiao-xue","zh-cn:2023-10-05-cplusplus-jiao-xue","/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki/2023-10-05-Cplusplus教学/ch18-16-std-span",false,null,"/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","zh-CN","zh-cn",{},{"title":5,"description":82},"JLT60Lfv8CYDPh-fGuma3ULirWH04G-yCp3sf6dsy4g",[2569,2574,2579,2585,2591,2597,2603,2609,2615,2621,2627,2633,2639,2645,2651,2657,2663,2669,2675,2681,2687,2693,2699,2705,2711,2717,2723,2729,2735,2741,2747,2748,2754,2760,2766,2772,2778,2784,2790,2796,2802,2808,2814,2820,2826,2832,2838,2844,2850,2856,2862,2868,2874,2880,2886,2892,2898,2904,2910,2916,2922,2928,2933,2938,2943,2948,2954,2960,2966,2972],{"path":2570,"stem":2571,"title":2572,"date":2553,"chapter":673,"chapterSort":2573,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch1-c-ji-chu-chu-shi","wiki/2023-10-05-Cplusplus教学/ch1-C++基础初识","C++基础初识",1000000,{"path":2575,"stem":2576,"title":2577,"date":2553,"chapter":720,"chapterSort":2578,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch10-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki/2023-10-05-Cplusplus教学/ch10-内存分区与生命周期","内存分区与生命周期",10000000,{"path":2580,"stem":2581,"title":2582,"date":2553,"chapter":2583,"chapterSort":2584,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch11-yin-yong","wiki/2023-10-05-Cplusplus教学/ch11-引用","引用","11",11000000,{"path":2586,"stem":2587,"title":2588,"date":2553,"chapter":2589,"chapterSort":2590,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch12-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki/2023-10-05-Cplusplus教学/ch12-函数提高与命名空间","函数提高与命名空间","12",12000000,{"path":2592,"stem":2593,"title":2594,"date":2553,"chapter":2595,"chapterSort":2596,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-1-feng-zhuang","wiki/2023-10-05-Cplusplus教学/ch13-1-封装","封装","13.1",13010000,{"path":2598,"stem":2599,"title":2600,"date":2553,"chapter":2601,"chapterSort":2602,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-2-dui-xiang-chu-shi-hua-he-qing-li","wiki/2023-10-05-Cplusplus教学/ch13-2-对象初始化和清理","对象初始化和清理","13.2",13020000,{"path":2604,"stem":2605,"title":2606,"date":2553,"chapter":2607,"chapterSort":2608,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-3-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch13-3-对象模型与this指针","对象模型与this指针","13.3",13030000,{"path":2610,"stem":2611,"title":2612,"date":2553,"chapter":2613,"chapterSort":2614,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-4-you-yuan-yu-yun-suan-fu-zhong-zai","wiki/2023-10-05-Cplusplus教学/ch13-4-友元与运算符重载","友元与运算符重载","13.4",13040000,{"path":2616,"stem":2617,"title":2618,"date":2553,"chapter":2619,"chapterSort":2620,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-5-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch13-5-继承","继承","13.5",13050000,{"path":2622,"stem":2623,"title":2624,"date":2553,"chapter":2625,"chapterSort":2626,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-6-duo-tai","wiki/2023-10-05-Cplusplus教学/ch13-6-多态","多态","13.6",13060000,{"path":2628,"stem":2629,"title":2630,"date":2553,"chapter":2631,"chapterSort":2632,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-lei-he-dui-xiang","wiki/2023-10-05-Cplusplus教学/ch13-类和对象","类和对象","13",13000000,{"path":2634,"stem":2635,"title":2636,"date":2553,"chapter":2637,"chapterSort":2638,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch14-wen-jian-cao-zuo","wiki/2023-10-05-Cplusplus教学/ch14-文件操作","文件操作","14",14000000,{"path":2640,"stem":2641,"title":2642,"date":2553,"chapter":2643,"chapterSort":2644,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch15-mu-ban","wiki/2023-10-05-Cplusplus教学/ch15-模板","模板","15",15000000,{"path":2646,"stem":2647,"title":2648,"date":2553,"chapter":2649,"chapterSort":2650,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-1-stl-chu-shi","wiki/2023-10-05-Cplusplus教学/ch16-1-STL初识","STL初识","16.1",16010000,{"path":2652,"stem":2653,"title":2654,"date":2553,"chapter":2655,"chapterSort":2656,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-2-std-array","wiki/2023-10-05-Cplusplus教学/ch16-2-std-array","std::array","16.2",16020000,{"path":2658,"stem":2659,"title":2660,"date":2553,"chapter":2661,"chapterSort":2662,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-3-string-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-3-string容器","string容器","16.3",16030000,{"path":2664,"stem":2665,"title":2666,"date":2553,"chapter":2667,"chapterSort":2668,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-4-vector-yu-deque-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-4-vector与deque容器","vector与deque容器","16.4",16040000,{"path":2670,"stem":2671,"title":2672,"date":2553,"chapter":2673,"chapterSort":2674,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-5-stack-queue-list-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-5-stack-queue-list容器","stack / queue / list 容器","16.5",16050000,{"path":2676,"stem":2677,"title":2678,"date":2553,"chapter":2679,"chapterSort":2680,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-6-set-map-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-6-set-map容器","set / map 容器","16.6",16060000,{"path":2682,"stem":2683,"title":2684,"date":2553,"chapter":2685,"chapterSort":2686,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-7-han-shu-dui-xiang-yu-wei-ci","wiki/2023-10-05-Cplusplus教学/ch16-7-函数对象与谓词","函数对象与谓词","16.7",16070000,{"path":2688,"stem":2689,"title":2690,"date":2553,"chapter":2691,"chapterSort":2692,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-8-chang-yong-suan-fa","wiki/2023-10-05-Cplusplus教学/ch16-8-常用算法","常用算法","16.8",16080000,{"path":2694,"stem":2695,"title":2696,"date":2553,"chapter":2697,"chapterSort":2698,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-stl-ti-gao-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch16-STL提高编程","STL提高编程","16",16000000,{"path":2700,"stem":2701,"title":2702,"date":2553,"chapter":2703,"chapterSort":2704,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch17-c-lei-xing-zhuan-huan","wiki/2023-10-05-Cplusplus教学/ch17-C++类型转换","C++类型转换","17",17000000,{"path":2706,"stem":2707,"title":2708,"date":2553,"chapter":2709,"chapterSort":2710,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-1-auto","wiki/2023-10-05-Cplusplus教学/ch18-1-auto","auto","18.1",18010000,{"path":2712,"stem":2713,"title":2714,"date":2553,"chapter":2715,"chapterSort":2716,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-10-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki/2023-10-05-Cplusplus教学/ch18-10-右值引用和移动语义","右值引用和移动语义","18.10",18100000,{"path":2718,"stem":2719,"title":2720,"date":2553,"chapter":2721,"chapterSort":2722,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-11-lambda-biao-da-shi","wiki/2023-10-05-Cplusplus教学/ch18-11-Lambda表达式","Lambda 表达式","18.11",18110000,{"path":2724,"stem":2725,"title":2726,"date":2553,"chapter":2727,"chapterSort":2728,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-12-std-function","wiki/2023-10-05-Cplusplus教学/ch18-12-std-function","std::function","18.12",18120000,{"path":2730,"stem":2731,"title":2732,"date":2553,"chapter":2733,"chapterSort":2734,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-13-std-bind","wiki/2023-10-05-Cplusplus教学/ch18-13-std-bind","std::bind","18.13",18130000,{"path":2736,"stem":2737,"title":2738,"date":2553,"chapter":2739,"chapterSort":2740,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","wiki/2023-10-05-Cplusplus教学/ch18-14-std-optional","std::optional","18.14",18140000,{"path":2742,"stem":2743,"title":2744,"date":2553,"chapter":2745,"chapterSort":2746,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-15-std-variant","wiki/2023-10-05-Cplusplus教学/ch18-15-std-variant","std::variant","18.15",18150000,{"path":2550,"stem":2559,"title":5,"date":2553,"chapter":2551,"chapterSort":2552,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},{"path":2749,"stem":2750,"title":2751,"date":2553,"chapter":2752,"chapterSort":2753,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-17-std-format-print","wiki/2023-10-05-Cplusplus教学/ch18-17-std-format-print","std::format / std::print","18.17",18170000,{"path":2755,"stem":2756,"title":2757,"date":2553,"chapter":2758,"chapterSort":2759,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-18-std-chrono","wiki/2023-10-05-Cplusplus教学/ch18-18-std-chrono","std::chrono","18.18",18180000,{"path":2761,"stem":2762,"title":2763,"date":2553,"chapter":2764,"chapterSort":2765,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-1-std-thread","wiki/2023-10-05-Cplusplus教学/ch18-19-1-std-thread","std::thread 与 join","18.19.1",18190100,{"path":2767,"stem":2768,"title":2769,"date":2553,"chapter":2770,"chapterSort":2771,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","wiki/2023-10-05-Cplusplus教学/ch18-19-2-mutex-lock-guard","mutex 与 lock_guard","18.19.2",18190200,{"path":2773,"stem":2774,"title":2775,"date":2553,"chapter":2776,"chapterSort":2777,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-3-std-atomic","wiki/2023-10-05-Cplusplus教学/ch18-19-3-std-atomic","std::atomic","18.19.3",18190300,{"path":2779,"stem":2780,"title":2781,"date":2553,"chapter":2782,"chapterSort":2783,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-4-condition-variable","wiki/2023-10-05-Cplusplus教学/ch18-19-4-condition-variable","condition_variable","18.19.4",18190400,{"path":2785,"stem":2786,"title":2787,"date":2553,"chapter":2788,"chapterSort":2789,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-bing-fa-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch18-19-并发编程","并发编程","18.19",18190000,{"path":2791,"stem":2792,"title":2793,"date":2553,"chapter":2794,"chapterSort":2795,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-2-nullptr","wiki/2023-10-05-Cplusplus教学/ch18-2-nullptr","nullptr","18.2",18020000,{"path":2797,"stem":2798,"title":2799,"date":2553,"chapter":2800,"chapterSort":2801,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-20-std-filesystem","wiki/2023-10-05-Cplusplus教学/ch18-20-std-filesystem","std::filesystem","18.20",18200000,{"path":2803,"stem":2804,"title":2805,"date":2553,"chapter":2806,"chapterSort":2807,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","wiki/2023-10-05-Cplusplus教学/ch18-21-modules简介","modules 简介","18.21",18210000,{"path":2809,"stem":2810,"title":2811,"date":2553,"chapter":2812,"chapterSort":2813,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-3-using","wiki/2023-10-05-Cplusplus教学/ch18-3-using","using","18.3",18030000,{"path":2815,"stem":2816,"title":2817,"date":2553,"chapter":2818,"chapterSort":2819,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-4-enum-class","wiki/2023-10-05-Cplusplus教学/ch18-4-enum-class","enum class","18.4",18040000,{"path":2821,"stem":2822,"title":2823,"date":2553,"chapter":2824,"chapterSort":2825,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-5-fan-wei-for-xun-huan","wiki/2023-10-05-Cplusplus教学/ch18-5-范围for循环","范围 for 循环","18.5",18050000,{"path":2827,"stem":2828,"title":2829,"date":2553,"chapter":2830,"chapterSort":2831,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-6-jie-gou-hua-bang-ding","wiki/2023-10-05-Cplusplus教学/ch18-6-结构化绑定","结构化绑定","18.6",18060000,{"path":2833,"stem":2834,"title":2835,"date":2553,"chapter":2836,"chapterSort":2837,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-7-constexpr","wiki/2023-10-05-Cplusplus教学/ch18-7-constexpr","constexpr","18.7",18070000,{"path":2839,"stem":2840,"title":2841,"date":2553,"chapter":2842,"chapterSort":2843,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-8-raii","wiki/2023-10-05-Cplusplus教学/ch18-8-RAII","RAII","18.8",18080000,{"path":2845,"stem":2846,"title":2847,"date":2553,"chapter":2848,"chapterSort":2849,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-9-zhi-neng-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch18-9-智能指针","智能指针","18.9",18090000,{"path":2851,"stem":2852,"title":2853,"date":2553,"chapter":2854,"chapterSort":2855,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-xian-dai-c","wiki/2023-10-05-Cplusplus教学/ch18-现代C++","现代C++","18",18000000,{"path":2857,"stem":2858,"title":2859,"date":2553,"chapter":2860,"chapterSort":2861,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-1-ding-shi-qi-yu-yi-bu-io","wiki/2023-10-05-Cplusplus教学/ch19-1-1-定时器与异步IO","定时器与异步 IO","19.1.1",19010100,{"path":2863,"stem":2864,"title":2865,"date":2553,"chapter":2866,"chapterSort":2867,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-2-boost-asio-ji-chu","wiki/2023-10-05-Cplusplus教学/ch19-1-2-Boost.Asio基础","Boost.Asio 基础","19.1.2",19010200,{"path":2869,"stem":2870,"title":2871,"date":2553,"chapter":2872,"chapterSort":2873,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-3-chuan-kou-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-3-串口通信","串口通信","19.1.3",19010300,{"path":2875,"stem":2876,"title":2877,"date":2553,"chapter":2878,"chapterSort":2879,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-4-tcp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-4-TCP通信","TCP 通信","19.1.4",19010400,{"path":2881,"stem":2882,"title":2883,"date":2553,"chapter":2884,"chapterSort":2885,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-5-udp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-5-UDP通信","UDP 通信","19.1.5",19010500,{"path":2887,"stem":2888,"title":2889,"date":2553,"chapter":2890,"chapterSort":2891,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-6-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch19-1-6-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","19.1.6",19010600,{"path":2893,"stem":2894,"title":2895,"date":2553,"chapter":2896,"chapterSort":2897,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","wiki/2023-10-05-Cplusplus教学/ch19-1-Boost.Asio异步IO库","Boost.Asio异步IO库","19.1",19010000,{"path":2899,"stem":2900,"title":2901,"date":2553,"chapter":2902,"chapterSort":2903,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-2-eigen-xian-xing-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-2-Eigen线性代数库","Eigen线性代数库","19.2",19020000,{"path":2905,"stem":2906,"title":2907,"date":2553,"chapter":2908,"chapterSort":2909,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-3-opencv-ji-suan-ji-shi-jue-ku","wiki/2023-10-05-Cplusplus教学/ch19-3-OpenCV计算机视觉库","OpenCV计算机视觉库","19.3",19030000,{"path":2911,"stem":2912,"title":2913,"date":2553,"chapter":2914,"chapterSort":2915,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-4-pcl-dian-yun-ku","wiki/2023-10-05-Cplusplus教学/ch19-4-PCL点云库","PCL点云库","19.4",19040000,{"path":2917,"stem":2918,"title":2919,"date":2553,"chapter":2920,"chapterSort":2921,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-5-sophus-li-qun-li-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-5-Sophus李群李代数库","Sophus 李群李代数库","19.5",19050000,{"path":2923,"stem":2924,"title":2925,"date":2553,"chapter":2926,"chapterSort":2927,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-chang-yong-ku","wiki/2023-10-05-Cplusplus教学/ch19-常用库","常用库学习","19",19000000,{"path":2929,"stem":2930,"title":2931,"date":2553,"chapter":678,"chapterSort":2932,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch2-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki/2023-10-05-Cplusplus教学/ch2-数据类型与数据存放","数据类型与数据存放",2000000,{"path":2934,"stem":2935,"title":2936,"date":2553,"chapter":683,"chapterSort":2937,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch3-shu-ru-shu-chu","wiki/2023-10-05-Cplusplus教学/ch3-输入输出","输入输出",3000000,{"path":2939,"stem":2940,"title":2941,"date":2553,"chapter":688,"chapterSort":2942,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch4-yun-suan-fu","wiki/2023-10-05-Cplusplus教学/ch4-运算符","运算符",4000000,{"path":2944,"stem":2945,"title":2946,"date":2553,"chapter":693,"chapterSort":2947,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch5-cheng-xu-liu-cheng-jie-gou","wiki/2023-10-05-Cplusplus教学/ch5-程序流程结构","程序流程结构",5000000,{"path":2949,"stem":2950,"title":2951,"date":2553,"chapter":2952,"chapterSort":2953,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch6-shu-zu","wiki/2023-10-05-Cplusplus教学/ch6-数组","数组","6",6000000,{"path":2955,"stem":2956,"title":2957,"date":2553,"chapter":2958,"chapterSort":2959,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch7-han-shu-yu-tou-wen-jian","wiki/2023-10-05-Cplusplus教学/ch7-函数与头文件","函数与头文件","7",7000000,{"path":2961,"stem":2962,"title":2963,"date":2553,"chapter":2964,"chapterSort":2965,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch8-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch8-指针","指针","8",8000000,{"path":2967,"stem":2968,"title":2969,"date":2553,"chapter":2970,"chapterSort":2971,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":2560},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch9-jie-gou-ti-yu-gong-yong-ti","wiki/2023-10-05-Cplusplus教学/ch9-结构体与共用体","结构体与共用体","9",9000000,{"path":2556,"stem":2973,"title":2974,"date":2553,"chapter":2561,"chapterSort":2975,"docKey":2555,"docRoot":2556,"docTitle":2557,"isWikiDoc":262,"isWikiIndex":262},"wiki/2023-10-05-Cplusplus教学/index","C/C++教程",0,{"variants":2977},[2978,2981,2984,2987,2990],{"path":2979,"localeSlug":2980,"i18nKey":2559},"/en-us/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","en-us",{"path":2982,"localeSlug":2983,"i18nKey":2559},"/zh-hant/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","zh-hant",{"path":2985,"localeSlug":2986,"i18nKey":2559},"/zh-hk/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","zh-hk",{"path":2988,"localeSlug":2989,"i18nKey":2559},"/zh-tw/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","zh-tw",{"path":2550,"localeSlug":2564,"i18nKey":2559},[2979,2562,2982,2562,2985,2562,2988,2562,2550,2562],1780663037141]