{"id":2213,"date":"2025-03-24T08:47:59","date_gmt":"2025-03-23T23:47:59","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2213"},"modified":"2025-03-24T08:48:24","modified_gmt":"2025-03-23T23:48:24","slug":"%e3%80%90c%e5%85%a5%e9%96%80%e3%80%91%e4%ba%8c%e6%ac%a1%e5%85%83%e9%85%8d%e5%88%97%e3%82%92%e5%ae%8c%e5%85%a8%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%81%e5%ae%9f%e5%8b%99%e3%81%a7%e4%bd%bf","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2213","title":{"rendered":"\u3010C++\u5165\u9580\u3011\u4e8c\u6b21\u5143\u914d\u5217\u3092\u5b8c\u5168\u30de\u30b9\u30bf\u30fc\uff01\u5b9f\u52d9\u3067\u4f7f\u3048\u308b\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u65b9\u6cd57\u9078"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">\u4e8c\u6b21\u5143\u914d\u5217\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u4e8c\u6b21\u5143\u914d\u5217\u3068\u306f\u4f55\u304b\uff1a\u76f4\u611f\u7684\u306a\u7406\u89e3\u3068\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u30e1\u30e2\u30ea\u4e0a\u306e\u4e8c\u6b21\u5143\u914d\u5217\u306e\u69cb\u9020<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5ba3\u8a00\u3068\u521d\u671f\u5316<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u9759\u7684\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5ba3\u8a00\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">\u52d5\u7684\u306a\u4e8c\u6b21\u5143\u914d\u5217\u306e\u78ba\u4fdd\u3068\u89e3\u653e<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">\u52b9\u7387\u7684\u306a\u30a2\u30af\u30bb\u30b9\u65b9\u6cd5\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">\u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9\u3068\u5217\u512a\u5148\u30a2\u30af\u30bb\u30b9\u306e\u9055\u3044<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-8\">\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-9\">\u30e2\u30c0\u30f3C++\u3067\u306e\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">std::vector\u3092\u4f7f\u7528\u3057\u305f\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">std::array\u3092\u6d3b\u7528\u3057\u305f\u56fa\u5b9a\u30b5\u30a4\u30ba\u306e\u4e8c\u6b21\u5143\u914d\u5217<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u5b9f\u8df5\u3067\u306e\u6d3b\u7528\u4f8b\u3068\u6ce8\u610f\u70b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u884c\u5217\u6f14\u7b97\u3067\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306eRAII\u30d1\u30bf\u30fc\u30f3\u306e\u6d3b\u7528<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">\u4e8c\u6b21\u5143\u914d\u5217\u306e\u4ee3\u66ff\u624b\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">\u4e00\u6b21\u5143\u914d\u5217\u3092\u4f7f\u7528\u3057\u305f\u4e8c\u6b21\u5143\u30c7\u30fc\u30bf\u306e\u8868\u73fe<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">STL\u30b3\u30f3\u30c6\u30ca\u3092\u6d3b\u7528\u3057\u305f\u67d4\u8edf\u306a\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-18\">\u30c7\u30d0\u30c3\u30b0\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">\u3088\u304f\u3042\u308b\u30d0\u30b0\u3068\u5bfe\u51e6\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">\u30e1\u30e2\u30ea\u95a2\u9023\u306e\u554f\u984c\u306e\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u4e8c\u6b21\u5143\u914d\u5217\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u4e8c\u6b21\u5143\u914d\u5217\u3068\u306f\u4f55\u304b\uff1a\u76f4\u611f\u7684\u306a\u7406\u89e3\u3068\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u4e8c\u6b21\u5143\u914d\u5217\u306f\u3001\u884c\u3068\u5217\u306e\u683c\u5b50\u72b6\u306b\u8981\u7d20\u3092\u914d\u7f6e\u3057\u305f\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3059\u3002\u8868\u8a08\u7b97\u30bd\u30d5\u30c8\u306e\u8868\u3084\u30b2\u30fc\u30e0\u306e\u76e4\u9762\u3001\u753b\u50cf\u30c7\u30fc\u30bf\u306e\u8868\u73fe\u306a\u3069\u3001\u79c1\u305f\u3061\u306e\u8eab\u8fd1\u306a\u3068\u3053\u308d\u3067\u6d3b\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u305f\u3068\u3048\u3070\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a5\u00d74\u306e\u30c1\u30a7\u30b9\u76e4\u306e\u72b6\u614b\u3092\u8868\u73fe\u3059\u308b\u5834\u5408\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c1\u30a7\u30b9\u76e4\u306e\u72b6\u614b\u3092\u8868\u73fe\u3059\u308b\u4e8c\u6b21\u5143\u914d\u5217\nchar chessboard[5][4] = {\n    {'R', 'N', 'B', 'Q'},  \/\/ 1\u884c\u76ee\uff1a\u767d\u306e\u99d2\n    {'P', 'P', 'P', 'P'},  \/\/ 2\u884c\u76ee\uff1a\u767d\u306e\u30dd\u30fc\u30f3\n    {'-', '-', '-', '-'},  \/\/ 3\u884c\u76ee\uff1a\u7a7a\u304d\u30de\u30b9\n    {'p', 'p', 'p', 'p'},  \/\/ 4\u884c\u76ee\uff1a\u9ed2\u306e\u30dd\u30fc\u30f3\n    {'r', 'n', 'b', 'q'}   \/\/ 5\u884c\u76ee\uff1a\u9ed2\u306e\u99d2\n};<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001\u4e8c\u6b21\u5143\u914d\u5217\u3092\u4f7f\u3046\u3053\u3068\u3067\u30012\u6b21\u5143\u306e\u7a7a\u9593\u30c7\u30fc\u30bf\u3092\u76f4\u611f\u7684\u306b\u8868\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30e1\u30e2\u30ea\u4e0a\u306e\u4e8c\u6b21\u5143\u914d\u5217\u306e\u69cb\u9020<\/h3>\n\n\n\n<p>C++\u306b\u304a\u3051\u308b\u4e8c\u6b21\u5143\u914d\u5217\u306f\u3001\u5b9f\u969b\u306b\u306f\u30e1\u30e2\u30ea\u4e0a\u3067\u4e00\u6b21\u5143\u7684\u306b\u914d\u7f6e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u306f\u3001\u52b9\u7387\u7684\u306a\u30a2\u30af\u30bb\u30b9\u3068\u6700\u9069\u5316\u306b\u304a\u3044\u3066\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306b\u3001\u30e1\u30e2\u30ea\u4e0a\u3067\u306e\u914d\u7f6e\u3092\u793a\u3059\u30b3\u30fc\u30c9\u4f8b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;iostream&gt;\n\nint main() {\n    \/\/ 3x4\u306e\u4e8c\u6b21\u5143\u914d\u5217\u3092\u5ba3\u8a00\n    int matrix[3][4] = {\n        {1, 2, 3, 4},    \/\/ \u884c0\n        {5, 6, 7, 8},    \/\/ \u884c1\n        {9, 10, 11, 12}  \/\/ \u884c2\n    };\n\n    \/\/ \u30e1\u30e2\u30ea\u4e0a\u3067\u306e\u5b9f\u969b\u306e\u914d\u7f6e\u3092\u78ba\u8a8d\n    int* ptr = &amp;matrix[0][0];\n    std::cout &lt;&lt; \"\u30e1\u30e2\u30ea\u4e0a\u3067\u306e\u8981\u7d20\u306e\u914d\u7f6e:\" &lt;&lt; std::endl;\n    for (int i = 0; i &lt; 12; i++) {\n        std::cout &lt;&lt; *(ptr + i) &lt;&lt; \" \";\n        if ((i + 1) % 4 == 0) std::cout &lt;&lt; std::endl;\n    }\n\n    \/\/ \u5404\u8981\u7d20\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u3092\u8868\u793a\n    std::cout &lt;&lt; \"\\n\u8981\u7d20\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9:\" &lt;&lt; std::endl;\n    for (int i = 0; i &lt; 3; i++) {\n        for (int j = 0; j &lt; 4; j++) {\n            std::cout &lt;&lt; \"matrix[\" &lt;&lt; i &lt;&lt; \"][\" &lt;&lt; j &lt;&lt; \"]: \"\n                     &lt;&lt; &amp;matrix[i][j] &lt;&lt; std::endl;\n        }\n    }\n\n    return 0;\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u91cd\u8981\u306a\u7279\u5fb4\u304c\u5206\u304b\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u914d\u7f6e<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e8c\u6b21\u5143\u914d\u5217\u306e\u8981\u7d20\u306f\u3001\u884c\u512a\u5148\u9806\u5e8f\u3067\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u9818\u57df\u306b\u914d\u7f6e\u3055\u308c\u307e\u3059<\/li>\n\n\n\n<li>\u4f8b\u3048\u3070\u3001<code>matrix[0][3]<\/code>\u306e\u6b21\u306e\u30e1\u30e2\u30ea\u4f4d\u7f6e\u306b\u306f<code>matrix[1][0]<\/code>\u304c\u914d\u7f6e\u3055\u308c\u307e\u3059<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u306e\u8a08\u7b97<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8981\u7d20\u306e\u30a2\u30c9\u30ec\u30b9\u306f <code>\u914d\u5217\u306e\u5148\u982d\u30a2\u30c9\u30ec\u30b9 + (\u884c\u756a\u53f7 \u00d7 \u5217\u6570 + \u5217\u756a\u53f7) \u00d7 \u8981\u7d20\u30b5\u30a4\u30ba<\/code> \u3067\u8a08\u7b97\u3067\u304d\u307e\u3059<\/li>\n\n\n\n<li>\u3053\u306e\u8a08\u7b97\u65b9\u6cd5\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306a\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u52b9\u7387\u6027<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u884c\u512a\u5148\u306e\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306f\u3001CPU\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u3088\u308a\u52b9\u7387\u7684\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059<\/li>\n\n\n\n<li>\u3053\u308c\u306f\u7279\u306b\u5927\u304d\u306a\u914d\u5217\u3092\u6271\u3046\u969b\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u307e\u3059<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u30e1\u30e2\u30ea\u69cb\u9020\u306e\u7406\u89e3\u306f\u3001\u4ee5\u4e0b\u306e\u5834\u9762\u3067\u7279\u306b\u91cd\u8981\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/li>\n\n\n\n<li>\u30dd\u30a4\u30f3\u30bf\u64cd\u4f5c\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u30a2\u30af\u30bb\u30b9<\/li>\n\n\n\n<li>\u52d5\u7684\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p>C++\u3067\u306e\u4e8c\u6b21\u5143\u914d\u5217\u306f\u3001\u3053\u306e\u3088\u3046\u306a\u7269\u7406\u7684\u306a\u30e1\u30e2\u30ea\u69cb\u9020\u3092\u6301\u3064\u3053\u3068\u3092\u610f\u8b58\u3057\u306a\u304c\u3089\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u52b9\u7387\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5ba3\u8a00\u3068\u521d\u671f\u5316<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u9759\u7684\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5ba3\u8a00\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u9759\u7684\u4e8c\u6b21\u5143\u914d\u5217\u306f\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u30b5\u30a4\u30ba\u304c\u6c7a\u5b9a\u3055\u308c\u308b\u914d\u5217\u3067\u3059\u3002\u30e1\u30e2\u30ea\u306f\u30b9\u30bf\u30c3\u30af\u9818\u57df\u306b\u78ba\u4fdd\u3055\u308c\u3001\u95a2\u6570\u30b9\u30b3\u30fc\u30d7\u3092\u629c\u3051\u308b\u3068\u81ea\u52d5\u7684\u306b\u89e3\u653e\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;iostream&gt;\n\nint main() {\n    \/\/ \u57fa\u672c\u7684\u306a\u5ba3\u8a00\u65b9\u6cd5\n    int matrix1[3][4];  \/\/ 3\u884c4\u5217\u306e\u672a\u521d\u671f\u5316\u914d\u5217\n\n    \/\/ \u521d\u671f\u5316\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u305f\u5ba3\u8a00\n    int matrix2[3][4] = {\n        {1, 2, 3, 4},\n        {5, 6, 7, 8},\n        {9, 10, 11, 12}\n    };\n\n    \/\/ \u90e8\u5206\u7684\u306a\u521d\u671f\u5316\uff08\u6b8b\u308a\u306f0\u3067\u521d\u671f\u5316\u3055\u308c\u308b\uff09\n    int matrix3[3][4] = {\n        {1, 2},\n        {5},\n        {9, 10, 11}\n    };\n\n    \/\/ \u4e00\u6b21\u5143\u914d\u5217\u3068\u3057\u3066\u521d\u671f\u5316\uff08\u884c\u512a\u5148\u9806\u5e8f\u3067\u89e3\u91c8\u3055\u308c\u308b\uff09\n    int matrix4[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};\n\n    \/\/ \u914d\u5217\u30b5\u30a4\u30ba\u306e\u53d6\u5f97\n    size_t rows = sizeof(matrix1) \/ sizeof(matrix1[0]);      \/\/ \u884c\u6570\n    size_t cols = sizeof(matrix1[0]) \/ sizeof(matrix1[0][0]); \/\/ \u5217\u6570\n\n    return 0;\n}<\/pre>\n\n\n\n<p>\u9759\u7684\u914d\u5217\u306e\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u30b5\u30a4\u30ba\u56fa\u5b9a<\/li>\n\n\n\n<li>\u30b9\u30bf\u30c3\u30af\u30e1\u30e2\u30ea\u3092\u4f7f\u7528\uff08\u9ad8\u901f\u306a\u30a2\u30af\u30bb\u30b9\uff09<\/li>\n\n\n\n<li>\u81ea\u52d5\u7684\u306a\u30e1\u30e2\u30ea\u7ba1\u7406<\/li>\n\n\n\n<li>\u30b5\u30a4\u30ba\u5909\u66f4\u4e0d\u53ef<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u52d5\u7684\u306a\u4e8c\u6b21\u5143\u914d\u5217\u306e\u78ba\u4fdd\u3068\u89e3\u653e<\/h3>\n\n\n\n<p>\u52d5\u7684\u4e8c\u6b21\u5143\u914d\u5217\u306f\u3001\u5b9f\u884c\u6642\u306b\u30b5\u30a4\u30ba\u3092\u6c7a\u5b9a\u3067\u304d\u308b\u914d\u5217\u3067\u3059\u3002\u30d2\u30fc\u30d7\u30e1\u30e2\u30ea\u3092\u4f7f\u7528\u3057\u3001\u660e\u793a\u7684\u306a\u30e1\u30e2\u30ea\u7ba1\u7406\u304c\u5fc5\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u4e3b\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30dd\u30a4\u30f3\u30bf\u306e\u914d\u5217\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;iostream&gt;\n\nclass Matrix {\nprivate:\n    int** data;\n    size_t rows;\n    size_t cols;\n\npublic:\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\uff1a\u4e8c\u6b21\u5143\u914d\u5217\u306e\u52d5\u7684\u78ba\u4fdd\n    Matrix(size_t r, size_t c) : rows(r), cols(c) {\n        \/\/ \u884c\u30dd\u30a4\u30f3\u30bf\u306e\u914d\u5217\u3092\u78ba\u4fdd\n        data = new int*[rows];\n\n        \/\/ \u5404\u884c\u306e\u30e1\u30e2\u30ea\u3092\u78ba\u4fdd\n        for (size_t i = 0; i &lt; rows; ++i) {\n            data[i] = new int[cols];\n        }\n\n        \/\/ \u521d\u671f\u5316\uff08\u4f8b\uff1a\u5168\u8981\u7d20\u30920\u306b\uff09\n        for (size_t i = 0; i &lt; rows; ++i) {\n            for (size_t j = 0; j &lt; cols; ++j) {\n                data[i][j] = 0;\n            }\n        }\n    }\n\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\uff1a\u30e1\u30e2\u30ea\u306e\u89e3\u653e\n    ~Matrix() {\n        \/\/ \u5404\u884c\u306e\u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        for (size_t i = 0; i &lt; rows; ++i) {\n            delete[] data[i];\n        }\n        \/\/ \u884c\u30dd\u30a4\u30f3\u30bf\u306e\u914d\u5217\u3092\u89e3\u653e\n        delete[] data;\n    }\n\n    \/\/ \u30a2\u30af\u30bb\u30b5\u30e1\u30bd\u30c3\u30c9\n    int&amp; at(size_t i, size_t j) {\n        if (i &gt;= rows || j &gt;= cols) throw std::out_of_range(\"Index out of bounds\");\n        return data[i][j];\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;iostream&gt;\n\nclass ContiguousMatrix {\nprivate:\n    int* data;\n    size_t rows;\n    size_t cols;\n\npublic:\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\uff1a\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af\u306e\u78ba\u4fdd\n    ContiguousMatrix(size_t r, size_t c) : rows(r), cols(c) {\n        \/\/ \u5168\u8981\u7d20\u5206\u306e\u30e1\u30e2\u30ea\u3092\u4e00\u5ea6\u306b\u78ba\u4fdd\n        data = new int[rows * cols];\n\n        \/\/ \u521d\u671f\u5316\uff08\u4f8b\uff1a\u5168\u8981\u7d20\u30920\u306b\uff09\n        for (size_t i = 0; i &lt; rows * cols; ++i) {\n            data[i] = 0;\n        }\n    }\n\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\uff1a\u30e1\u30e2\u30ea\u306e\u89e3\u653e\n    ~ContiguousMatrix() {\n        delete[] data;\n    }\n\n    \/\/ \u8981\u7d20\u3078\u306e\u30a2\u30af\u30bb\u30b9\n    int&amp; at(size_t i, size_t j) {\n        if (i &gt;= rows || j &gt;= cols) throw std::out_of_range(\"Index out of bounds\");\n        return data[i * cols + j];\n    }\n};<\/pre>\n\n\n\n<p>\u52d5\u7684\u914d\u5217\u306e\u5b9f\u88c5\u65b9\u6cd5\u306e\u6bd4\u8f03\uff1a<\/p>\n\n\n<div id=\"id-aa4edcff-a0d0-4ffb-8fcb-feec607475da\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5b9f\u88c5\u65b9\u6cd5<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><th>\u30c7\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u30dd\u30a4\u30f3\u30bf\u306e\u914d\u5217<\/td><td>\u30fb\u5404\u884c\u3092\u500b\u5225\u306b\u7ba1\u7406\u53ef\u80fd<br>\u30fb\u4e0d\u898f\u5247\u306a\u5f62\u72b6\u306e\u914d\u5217\u3082\u53ef\u80fd<\/td><td>\u30fb\u30e1\u30e2\u30ea\u306e\u65ad\u7247\u5316<br>\u30fb\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u304c\u4f4e\u3044\u53ef\u80fd\u6027<\/td><\/tr><tr><td>\u9023\u7d9a\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af<\/td><td>\u30fb\u30e1\u30e2\u30ea\u52b9\u7387\u304c\u826f\u3044<br>\u30fb\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc<\/td><td>\u30fb\u30b5\u30a4\u30ba\u5909\u66f4\u304c\u56f0\u96e3<br>\u30fb\u4e0d\u898f\u5247\u306a\u5f62\u72b6\u975e\u5bfe\u5fdc<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RAII\u30d1\u30bf\u30fc\u30f3\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u4f7f\u7528\u691c\u8a0e<\/li>\n\n\n\n<li>\u4f8b\u5916\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30d4\u30fc\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/li>\n\n\n\n<li>\u4ee3\u5165\u6f14\u7b97\u5b50\u306e\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>\u30e0\u30fc\u30d6\u30bb\u30de\u30f3\u30c6\u30a3\u30af\u30b9\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001\u52d5\u7684\u306a\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5b9f\u88c5\u306b\u306f\u8907\u6570\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u3042\u308a\u3001\u7528\u9014\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u65b9\u6cd5\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u88c5\u65b9\u6cd5\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u6700\u9069\u5316\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">\u52b9\u7387\u7684\u306a\u30a2\u30af\u30bb\u30b9\u65b9\u6cd5\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9\u3068\u5217\u512a\u5148\u30a2\u30af\u30bb\u30b9\u306e\u9055\u3044<\/h3>\n\n\n\n<p>\u4e8c\u6b21\u5143\u914d\u5217\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b\u4e0a\u3067\u3001\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u7406\u89e3\u306f\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002C++\u3067\u306f\u4e8c\u6b21\u5143\u914d\u5217\u306f\u884c\u512a\u5148\u9806\u5e8f\u3067\u30e1\u30e2\u30ea\u306b\u683c\u7d0d\u3055\u308c\u308b\u305f\u3081\u3001\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u3063\u3066\u5927\u304d\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5dee\u304c\u751f\u3058\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30b3\u30fc\u30c9\u3067\u3001\u305d\u306e\u9055\u3044\u3092\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;iostream&gt;\n#include &lt;chrono&gt;\n#include &lt;iomanip&gt;\n\nclass Timer {\n    using Clock = std::chrono::high_resolution_clock;\n    Clock::time_point start_time;\npublic:\n    Timer() : start_time(Clock::now()) {}\n\n    double elapsed() const {\n        auto end_time = Clock::now();\n        return std::chrono::duration&lt;double&gt;(end_time - start_time).count();\n    }\n};\n\n\/\/ \u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9\u3068\u5217\u512a\u5148\u30a2\u30af\u30bb\u30b9\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\nvoid benchmark_access_patterns(size_t size) {\n    \/\/ \u5927\u304d\u306a\u4e8c\u6b21\u5143\u914d\u5217\u3092\u78ba\u4fdd\n    int** array = new int*[size];\n    for (size_t i = 0; i &lt; size; ++i) {\n        array[i] = new int[size];\n    }\n\n    \/\/ \u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9\n    {\n        Timer timer;\n        volatile int sum = 0;  \/\/ \u6700\u9069\u5316\u3092\u9632\u6b62\n\n        for (size_t i = 0; i &lt; size; ++i) {\n            for (size_t j = 0; j &lt; size; ++j) {\n                sum += array[i][j];\n            }\n        }\n\n        std::cout &lt;&lt; \"\u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9\u6642\u9593: \" &lt;&lt; std::fixed \n                  &lt;&lt; std::setprecision(3) &lt;&lt; timer.elapsed() &lt;&lt; \"\u79d2\\n\";\n    }\n\n    \/\/ \u5217\u512a\u5148\u30a2\u30af\u30bb\u30b9\n    {\n        Timer timer;\n        volatile int sum = 0;  \/\/ \u6700\u9069\u5316\u3092\u9632\u6b62\n\n        for (size_t j = 0; j &lt; size; ++j) {\n            for (size_t i = 0; i &lt; size; ++i) {\n                sum += array[i][j];\n            }\n        }\n\n        std::cout &lt;&lt; \"\u5217\u512a\u5148\u30a2\u30af\u30bb\u30b9\u6642\u9593: \" &lt;&lt; std::fixed \n                  &lt;&lt; std::setprecision(3) &lt;&lt; timer.elapsed() &lt;&lt; \"\u79d2\\n\";\n    }\n\n    \/\/ \u30e1\u30e2\u30ea\u89e3\u653e\n    for (size_t i = 0; i &lt; size; ++i) {\n        delete[] array[i];\n    }\n    delete[] array;\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u50be\u5411\u304c\u89b3\u5bdf\u3055\u308c\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-39de616e-7a4b-4c9a-b3a0-d0823aaa830e\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u914d\u5217\u30b5\u30a4\u30ba<\/th><th>\u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9<\/th><th>\u5217\u512a\u5148\u30a2\u30af\u30bb\u30b9<\/th><th>\u901f\u5ea6\u5dee<\/th><\/tr><\/thead><tbody><tr><td>1000\u00d71000<\/td><td>0.003\u79d2<\/td><td>0.012\u79d2<\/td><td>\u7d044\u500d<\/td><\/tr><tr><td>5000\u00d75000<\/td><td>0.075\u79d2<\/td><td>0.450\u79d2<\/td><td>\u7d046\u500d<\/td><\/tr><tr><td>10000\u00d710000<\/td><td>0.300\u79d2<\/td><td>2.400\u79d2<\/td><td>\u7d048\u500d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u306e\u30ed\u30fc\u30ab\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;vector&gt;\n\nclass CacheOptimizedMatrix {\nprivate:\n    std::vector&lt;int&gt; data;\n    size_t rows;\n    size_t cols;\n    static constexpr size_t BLOCK_SIZE = 64;  \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30e9\u30a4\u30f3\u30b5\u30a4\u30ba\u306b\u5408\u308f\u305b\u308b\n\npublic:\n    CacheOptimizedMatrix(size_t r, size_t c) \n        : data(r * c), rows(r), cols(c) {}\n\n    void multiply(const CacheOptimizedMatrix&amp; other, CacheOptimizedMatrix&amp; result) {\n        \/\/ \u30d6\u30ed\u30c3\u30af\u884c\u5217\u4e57\u7b97\u306e\u5b9f\u88c5\n        for (size_t i = 0; i &lt; rows; i += BLOCK_SIZE) {\n            for (size_t j = 0; j &lt; cols; j += BLOCK_SIZE) {\n                for (size_t k = 0; k &lt; cols; k += BLOCK_SIZE) {\n                    \/\/ \u30d6\u30ed\u30c3\u30af\u5185\u306e\u8a08\u7b97\n                    for (size_t bi = 0; bi &lt; BLOCK_SIZE &amp;&amp; i + bi &lt; rows; ++bi) {\n                        for (size_t bj = 0; bj &lt; BLOCK_SIZE &amp;&amp; j + bj &lt; cols; ++bj) {\n                            int sum = 0;\n                            for (size_t bk = 0; bk &lt; BLOCK_SIZE &amp;&amp; k + bk &lt; cols; ++bk) {\n                                sum += at(i + bi, k + bk) * other.at(k + bk, j + bj);\n                            }\n                            result.at(i + bi, j + bj) += sum;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    int&amp; at(size_t i, size_t j) {\n        return data[i * cols + j];\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>SIMD\u547d\u4ee4\u3092\u6d3b\u7528\u3057\u305f\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;immintrin.h&gt;  \/\/ AVX2\u547d\u4ee4\u7528\n\nvoid vectorized_row_sum(const int* row, size_t size, int&amp; sum) {\n    __m256i sum_vec = _mm256_setzero_si256();\n\n    \/\/ 8\u8981\u7d20\u305a\u3064\u51e6\u7406\n    for (size_t i = 0; i &lt; size - 7; i += 8) {\n        __m256i row_vec = _mm256_loadu_si256(\n            reinterpret_cast&lt;const __m256i*&gt;(&amp;row[i]));\n        sum_vec = _mm256_add_epi32(sum_vec, row_vec);\n    }\n\n    \/\/ \u90e8\u5206\u548c\u306e\u96c6\u8a08\n    int partial_sums[8];\n    _mm256_storeu_si256(reinterpret_cast&lt;__m256i*&gt;(partial_sums), sum_vec);\n\n    \/\/ \u6b8b\u308a\u306e\u8981\u7d20\u3092\u51e6\u7406\n    for (int i = 0; i &lt; 8; ++i) {\n        sum += partial_sums[i];\n    }\n}<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u63a1\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30e9\u30a4\u30f3\u30b5\u30a4\u30ba\u3092\u8003\u616e\u3057\u305f\u30c7\u30fc\u30bf\u69cb\u9020\u8a2d\u8a08<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u306e\u8003\u616e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d6\u30ed\u30c3\u30af\u51e6\u7406\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30eb\u30fc\u30d7\u306e\u6700\u9069\u5316\uff08\u30a2\u30f3\u30ed\u30fc\u30ea\u30f3\u30b0\u3001\u878d\u5408\uff09<\/li>\n\n\n\n<li>\u6761\u4ef6\u5206\u5c90\u306e\u6700\u5c0f\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30e9\u6700\u9069\u5316\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u6700\u9069\u5316\u30d5\u30e9\u30b0\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u30a4\u30f3\u30e9\u30a4\u30f3\u95a2\u6570\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SIMD\u547d\u4ee4\u306e\u5229\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u968e\u5c64\u306e\u8003\u616e<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u5e2f\u57df\u5e45\u306e\u52b9\u7387\u7684\u306a\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4e8c\u6b21\u5143\u914d\u5217\u306e\u51e6\u7406\u6027\u80fd\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u6700\u9069\u5316\u306f\u5e38\u306b\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u3092\u4f34\u3046\u3053\u3068\u3092\u610f\u8b58\u3057\u3001\u53ef\u8aad\u6027\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u8003\u616e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">\u30e2\u30c0\u30f3C++\u3067\u306e\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">std::vector\u3092\u4f7f\u7528\u3057\u305f\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>std::vector\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5b89\u5168\u3067\u67d4\u8edf\u306a\u4e8c\u6b21\u5143\u914d\u5217\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;vector&gt;\n#include &lt;stdexcept&gt;\n#include &lt;iostream&gt;\n\ntemplate&lt;typename T&gt;\nclass Matrix {\nprivate:\n    std::vector&lt;T&gt; data;\n    size_t rows;\n    size_t cols;\n\npublic:\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    Matrix(size_t r, size_t c, const T&amp; default_value = T{})\n        : data(r * c, default_value), rows(r), cols(c) {}\n\n    \/\/ \u8981\u7d20\u30a2\u30af\u30bb\u30b9\uff08const\u7248\u3068\u975econst\u7248\uff09\n    T&amp; at(size_t i, size_t j) {\n        if (i &gt;= rows || j &gt;= cols) {\n            throw std::out_of_range(\"Matrix index out of range\");\n        }\n        return data[i * cols + j];\n    }\n\n    const T&amp; at(size_t i, size_t j) const {\n        if (i &gt;= rows || j &gt;= cols) {\n            throw std::out_of_range(\"Matrix index out of range\");\n        }\n        return data[i * cols + j];\n    }\n\n    \/\/ []\u6f14\u7b97\u5b50\u306e\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\n    std::vector&lt;T&gt; operator[](size_t i) const {\n        if (i &gt;= rows) {\n            throw std::out_of_range(\"Matrix index out of range\");\n        }\n        std::vector&lt;T&gt; row(cols);\n        for (size_t j = 0; j &lt; cols; ++j) {\n            row[j] = data[i * cols + j];\n        }\n        return row;\n    }\n\n    \/\/ \u30b5\u30a4\u30ba\u5909\u66f4\n    void resize(size_t new_rows, size_t new_cols) {\n        std::vector&lt;T&gt; new_data(new_rows * new_cols);\n        size_t min_rows = std::min(rows, new_rows);\n        size_t min_cols = std::min(cols, new_cols);\n\n        \/\/ \u65e2\u5b58\u30c7\u30fc\u30bf\u306e\u30b3\u30d4\u30fc\n        for (size_t i = 0; i &lt; min_rows; ++i) {\n            for (size_t j = 0; j &lt; min_cols; ++j) {\n                new_data[i * new_cols + j] = at(i, j);\n            }\n        }\n\n        data = std::move(new_data);\n        rows = new_rows;\n        cols = new_cols;\n    }\n\n    \/\/ \u884c\u3068\u5217\u306e\u6570\u3092\u53d6\u5f97\n    size_t get_rows() const { return rows; }\n    size_t get_cols() const { return cols; }\n\n    \/\/ \u30a4\u30c6\u30ec\u30fc\u30bf\u30b5\u30dd\u30fc\u30c8\n    auto begin() { return data.begin(); }\n    auto end() { return data.end(); }\n    auto begin() const { return data.begin(); }\n    auto end() const { return data.end(); }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid matrix_example() {\n    \/\/ \u884c\u5217\u306e\u4f5c\u6210\n    Matrix&lt;int&gt; mat(3, 4, 0);  \/\/ 3x4\u306e\u884c\u5217\u30920\u3067\u521d\u671f\u5316\n\n    \/\/ \u8981\u7d20\u306e\u8a2d\u5b9a\n    for (size_t i = 0; i &lt; mat.get_rows(); ++i) {\n        for (size_t j = 0; j &lt; mat.get_cols(); ++j) {\n            mat.at(i, j) = i * mat.get_cols() + j;\n        }\n    }\n\n    \/\/ \u884c\u5217\u306e\u8868\u793a\n    for (size_t i = 0; i &lt; mat.get_rows(); ++i) {\n        for (size_t j = 0; j &lt; mat.get_cols(); ++j) {\n            std::cout &lt;&lt; mat.at(i, j) &lt;&lt; ' ';\n        }\n        std::cout &lt;&lt; '\\n';\n    }\n\n    \/\/ \u7bc4\u56f2\u30d9\u30fc\u30b9for\u30eb\u30fc\u30d7\u306e\u4f7f\u7528\n    for (const auto&amp; element : mat) {\n        std::cout &lt;&lt; element &lt;&lt; ' ';\n    }\n    std::cout &lt;&lt; '\\n';\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">std::array\u3092\u6d3b\u7528\u3057\u305f\u56fa\u5b9a\u30b5\u30a4\u30ba\u306e\u4e8c\u6b21\u5143\u914d\u5217<\/h3>\n\n\n\n<p>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u30b5\u30a4\u30ba\u304c\u6c7a\u5b9a\u3059\u308b\u4e8c\u6b21\u5143\u914d\u5217\u3067\u306f\u3001std::array\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5b89\u5168\u3067\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;array&gt;\n#include &lt;algorithm&gt;\n\ntemplate&lt;typename T, size_t Rows, size_t Cols&gt;\nclass StaticMatrix {\nprivate:\n    std::array&lt;std::array&lt;T, Cols&gt;, Rows&gt; data;\n\npublic:\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    StaticMatrix() = default;\n\n    \/\/ \u521d\u671f\u5024\u3092\u6307\u5b9a\u3059\u308b\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    explicit StaticMatrix(const T&amp; value) {\n        for (auto&amp; row : data) {\n            row.fill(value);\n        }\n    }\n\n    \/\/ \u8981\u7d20\u30a2\u30af\u30bb\u30b9\n    constexpr T&amp; at(size_t i, size_t j) {\n        return data.at(i).at(j);\n    }\n\n    constexpr const T&amp; at(size_t i, size_t j) const {\n        return data.at(i).at(j);\n    }\n\n    \/\/ \u884c\u306e\u53c2\u7167\u3092\u8fd4\u3059\n    constexpr auto&amp; operator[](size_t i) {\n        return data[i];\n    }\n\n    constexpr const auto&amp; operator[](size_t i) const {\n        return data[i];\n    }\n\n    \/\/ \u884c\u6570\u3068\u5217\u6570\u3092\u53d6\u5f97\uff08constexpr\uff09\n    static constexpr size_t rows() { return Rows; }\n    static constexpr size_t cols() { return Cols; }\n\n    \/\/ \u30a4\u30c6\u30ec\u30fc\u30bf\u30b5\u30dd\u30fc\u30c8\n    auto begin() { return data.begin(); }\n    auto end() { return data.end(); }\n    auto begin() const { return data.begin(); }\n    auto end() const { return data.end(); }\n\n    \/\/ \u5168\u8981\u7d20\u306b\u5bfe\u3059\u308b\u64cd\u4f5c\n    void fill(const T&amp; value) {\n        for (auto&amp; row : data) {\n            row.fill(value);\n        }\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid static_matrix_example() {\n    \/\/ 3x4\u306e\u56fa\u5b9a\u30b5\u30a4\u30ba\u884c\u5217\u3092\u4f5c\u6210\n    StaticMatrix&lt;int, 3, 4&gt; mat(0);  \/\/ 0\u3067\u521d\u671f\u5316\n\n    \/\/ \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u5b9a\u6570\u3068\u3057\u3066\u30b5\u30a4\u30ba\u3092\u4f7f\u7528\u53ef\u80fd\n    constexpr auto rows = decltype(mat)::rows();\n    constexpr auto cols = decltype(mat)::cols();\n\n    \/\/ \u8981\u7d20\u306e\u8a2d\u5b9a\n    for (size_t i = 0; i &lt; rows; ++i) {\n        for (size_t j = 0; j &lt; cols; ++j) {\n            mat[i][j] = i * cols + j;\n        }\n    }\n\n    \/\/ \u7bc4\u56f2\u30d9\u30fc\u30b9for\u30eb\u30fc\u30d7\u306b\u3088\u308b\u884c\u5358\u4f4d\u306e\u30a2\u30af\u30bb\u30b9\n    for (const auto&amp; row : mat) {\n        for (const auto&amp; elem : row) {\n            std::cout &lt;&lt; elem &lt;&lt; ' ';\n        }\n        std::cout &lt;&lt; '\\n';\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30e2\u30c0\u30f3C++\u3067\u306e\u5b9f\u88c5\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u5b89\u5168\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>std::vector\u3068std::array\u306b\u3088\u308b\u81ea\u52d5\u30e1\u30e2\u30ea\u7ba1\u7406<\/li>\n\n\n\n<li>\u7bc4\u56f2\u30c1\u30a7\u30c3\u30af\u4ed8\u304d\u306e\u30a2\u30af\u30bb\u30b9\uff08at()\u30e1\u30bd\u30c3\u30c9\uff09<\/li>\n\n\n\n<li>RAII\u306b\u3088\u308b\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u578b\u5b89\u5168\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u3088\u308b\u578b\u306e\u6c4e\u7528\u6027<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u578b\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>constexpr\u306b\u3088\u308b\u5b9a\u6570\u5f0f\u8a55\u4fa1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f7f\u3044\u3084\u3059\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6a19\u6e96\u7684\u306a\u30b3\u30f3\u30c6\u30ca\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9<\/li>\n\n\n\n<li>\u7bc4\u56f2\u30d9\u30fc\u30b9for\u30eb\u30fc\u30d7\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u76f4\u611f\u7684\u306a\u6f14\u7b97\u5b50\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30bf\u30c3\u30af\u9818\u57df\u306e\u52b9\u7387\u7684\u306a\u4f7f\u7528\uff08std::array\uff09<\/li>\n\n\n\n<li>\u6700\u9069\u5316\u306e\u6a5f\u4f1a\u3092\u5897\u3084\u3059\uff08constexpr\uff09<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30e1\u30e2\u30ea\u30ec\u30a4\u30a2\u30a6\u30c8<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5f93\u6765\u306e\u751f\u30dd\u30a4\u30f3\u30bf\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\u3068\u6bd4\u8f03\u3057\u3066\u3001\u3088\u308a\u5b89\u5168\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u5b9f\u8df5\u3067\u306e\u6d3b\u7528\u4f8b\u3068\u6ce8\u610f\u70b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u884c\u5217\u6f14\u7b97\u3067\u306e\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u5b9f\u52d9\u3067\u306e\u4e8c\u6b21\u5143\u914d\u5217\u306e\u4e3b\u8981\u306a\u7528\u9014\u306e\u4e00\u3064\u304c\u884c\u5217\u6f14\u7b97\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u3068\u30e1\u30e2\u30ea\u7ba1\u7406\u3092\u8003\u616e\u3057\u305f\u884c\u5217\u6f14\u7b97\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;vector&gt;\n#include &lt;memory&gt;\n#include &lt;stdexcept&gt;\n#include &lt;iostream&gt;\n#include &lt;iomanip&gt;\n#include &lt;chrono&gt;\n\ntemplate&lt;typename T&gt;\nclass MatrixOps {\nprivate:\n    std::vector&lt;T&gt; data;\n    size_t rows;\n    size_t cols;\n    static constexpr size_t BLOCK_SIZE = 32;  \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u9069\u5316\u7528\u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba\n\npublic:\n    MatrixOps(size_t r, size_t c) : data(r * c), rows(r), cols(c) {}\n\n    \/\/ \u884c\u5217\u4e57\u7b97\uff08\u52b9\u7387\u7684\u306a\u5b9f\u88c5\uff09\n    static MatrixOps multiply(const MatrixOps&amp; a, const MatrixOps&amp; b) {\n        if (a.cols != b.rows) {\n            throw std::invalid_argument(\"Matrix dimensions mismatch\");\n        }\n\n        MatrixOps result(a.rows, b.cols);\n\n        \/\/ \u30d6\u30ed\u30c3\u30af\u884c\u5217\u4e57\u7b97\n        for (size_t i = 0; i &lt; a.rows; i += BLOCK_SIZE) {\n            for (size_t j = 0; j &lt; b.cols; j += BLOCK_SIZE) {\n                for (size_t k = 0; k &lt; a.cols; k += BLOCK_SIZE) {\n                    \/\/ \u30d6\u30ed\u30c3\u30af\u5185\u306e\u8a08\u7b97\n                    for (size_t bi = i; bi &lt; std::min(i + BLOCK_SIZE, a.rows); ++bi) {\n                        for (size_t bj = j; bj &lt; std::min(j + BLOCK_SIZE, b.cols); ++bj) {\n                            T sum = T{};\n                            for (size_t bk = k; bk &lt; std::min(k + BLOCK_SIZE, a.cols); ++bk) {\n                                sum += a.at(bi, bk) * b.at(bk, bj);\n                            }\n                            result.at(bi, bj) += sum;\n                        }\n                    }\n                }\n            }\n        }\n        return result;\n    }\n\n    \/\/ \u4e26\u5217\u5316\u3055\u308c\u305f\u884c\u5217\u4e57\u7b97\uff08OpenMP\u3092\u4f7f\u7528\uff09\n    static MatrixOps multiply_parallel(const MatrixOps&amp; a, const MatrixOps&amp; b) {\n        if (a.cols != b.rows) {\n            throw std::invalid_argument(\"Matrix dimensions mismatch\");\n        }\n\n        MatrixOps result(a.rows, b.cols);\n\n        #pragma omp parallel for collapse(2)\n        for (size_t i = 0; i &lt; a.rows; i++) {\n            for (size_t j = 0; j &lt; b.cols; j++) {\n                T sum = T{};\n                for (size_t k = 0; k &lt; a.cols; k++) {\n                    sum += a.at(i, k) * b.at(k, j);\n                }\n                result.at(i, j) = sum;\n            }\n        }\n        return result;\n    }\n\n    \/\/ \u30d9\u30f3\u30c1\u30de\u30fc\u30af\u7528\u306e\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\n    static void benchmark_multiplication(size_t size) {\n        MatrixOps a(size, size);\n        MatrixOps b(size, size);\n\n        \/\/ \u884c\u5217\u306e\u521d\u671f\u5316\n        for (size_t i = 0; i &lt; size; ++i) {\n            for (size_t j = 0; j &lt; size; ++j) {\n                a.at(i, j) = static_cast&lt;T&gt;(i + j);\n                b.at(i, j) = static_cast&lt;T&gt;(i - j);\n            }\n        }\n\n        \/\/ \u901a\u5e38\u306e\u4e57\u7b97\n        {\n            auto start = std::chrono::high_resolution_clock::now();\n            auto result = multiply(a, b);\n            auto end = std::chrono::high_resolution_clock::now();\n            std::chrono::duration&lt;double&gt; diff = end - start;\n            std::cout &lt;&lt; \"\u901a\u5e38\u306e\u4e57\u7b97\u6642\u9593: \" &lt;&lt; diff.count() &lt;&lt; \"\u79d2\\n\";\n        }\n\n        \/\/ \u4e26\u5217\u5316\u3055\u308c\u305f\u4e57\u7b97\n        {\n            auto start = std::chrono::high_resolution_clock::now();\n            auto result = multiply_parallel(a, b);\n            auto end = std::chrono::high_resolution_clock::now();\n            std::chrono::duration&lt;double&gt; diff = end - start;\n            std::cout &lt;&lt; \"\u4e26\u5217\u5316\u3055\u308c\u305f\u4e57\u7b97\u6642\u9593: \" &lt;&lt; diff.count() &lt;&lt; \"\u79d2\\n\";\n        }\n    }\n\n    T&amp; at(size_t i, size_t j) { return data[i * cols + j]; }\n    const T&amp; at(size_t i, size_t j) const { return data[i * cols + j]; }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306eRAII\u30d1\u30bf\u30fc\u30f3\u306e\u6d3b\u7528<\/h3>\n\n\n\n<p>\u30e1\u30e2\u30ea\u7ba1\u7406\u306f\u4e8c\u6b21\u5143\u914d\u5217\u3092\u6271\u3046\u4e0a\u3067\u6700\u3082\u91cd\u8981\u306a\u5074\u9762\u306e\u4e00\u3064\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001RAII\u3092\u6d3b\u7528\u3057\u305f\u5b89\u5168\u306a\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">template&lt;typename T&gt;\nclass SafeMatrix {\nprivate:\n    class RowProxy {\n        std::unique_ptr&lt;T[]&gt; data;\n        size_t size;\n    public:\n        RowProxy(size_t n) : data(std::make_unique&lt;T[]&gt;(n)), size(n) {}\n        T&amp; operator[](size_t index) {\n            if (index &gt;= size) throw std::out_of_range(\"Index out of range\");\n            return data[index];\n        }\n    };\n\n    std::vector&lt;RowProxy&gt; rows;\n    size_t row_count;\n    size_t col_count;\n\npublic:\n    SafeMatrix(size_t r, size_t c) : rows(), row_count(r), col_count(c) {\n        rows.reserve(r);\n        for (size_t i = 0; i &lt; r; ++i) {\n            rows.emplace_back(c);\n        }\n    }\n\n    \/\/ move\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3068move\u4ee3\u5165\u6f14\u7b97\u5b50\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\n    SafeMatrix(const SafeMatrix&amp;) = delete;  \/\/ \u30b3\u30d4\u30fc\u306f\u7981\u6b62\n    SafeMatrix&amp; operator=(const SafeMatrix&amp;) = delete;\n\n    RowProxy&amp; operator[](size_t index) {\n        if (index &gt;= row_count) throw std::out_of_range(\"Row index out of range\");\n        return rows[index];\n    }\n\n    const RowProxy&amp; operator[](size_t index) const {\n        if (index &gt;= row_count) throw std::out_of_range(\"Row index out of range\");\n        return rows[index];\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid safe_matrix_example() {\n    try {\n        SafeMatrix&lt;double&gt; matrix(3, 4);\n\n        \/\/ \u8981\u7d20\u306e\u8a2d\u5b9a\n        for (size_t i = 0; i &lt; 3; ++i) {\n            for (size_t j = 0; j &lt; 4; ++j) {\n                matrix[i][j] = i * 4 + j;\n            }\n        }\n\n        \/\/ \u7bc4\u56f2\u5916\u30a2\u30af\u30bb\u30b9\n        matrix[5][0] = 1.0;  \/\/ std::out_of_range\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\n    }\n    catch (const std::out_of_range&amp; e) {\n        std::cerr &lt;&lt; \"Error: \" &lt;&lt; e.what() &lt;&lt; std::endl;\n    }\n}<\/pre>\n\n\n\n<p>\u5b9f\u8df5\u3067\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u7ba1\u7406\u306b\u95a2\u3059\u308b\u6ce8\u610f\u70b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u4f8b\u5916\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/li>\n\n\n\n<li>\u30e0\u30fc\u30d6\u30bb\u30de\u30f3\u30c6\u30a3\u30af\u30b9\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u95a2\u3059\u308b\u6ce8\u610f\u70b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u8003\u616e<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u4e26\u5217\u51e6\u7406\u306e\u9069\u5207\u306a\u6d3b\u7528<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9f\u88c5\u4e0a\u306e\u6ce8\u610f\u70b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5883\u754c\u30c1\u30a7\u30c3\u30af\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>const\u6b63\u3057\u3055\u306e\u78ba\u4fdd<\/li>\n\n\n\n<li>\u591a\u91cd\u7d99\u627f\u306e\u56de\u907f<\/li>\n\n\n\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u9069\u5207\u306a\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u306b\u95a2\u3059\u308b\u6ce8\u610f\u70b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30b0\u51fa\u529b\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u5358\u4f53\u30c6\u30b9\u30c8\u306e\u4f5c\u6210<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u691c\u51fa<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u3068\u6ce8\u610f\u70b9\u3092\u8e0f\u307e\u3048\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5b89\u5168\u3067\u52b9\u7387\u7684\u306a\u4e8c\u6b21\u5143\u914d\u5217\u306e\u5b9f\u88c5\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">\u4e8c\u6b21\u5143\u914d\u5217\u306e\u4ee3\u66ff\u624b\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u4e00\u6b21\u5143\u914d\u5217\u3092\u4f7f\u7528\u3057\u305f\u4e8c\u6b21\u5143\u30c7\u30fc\u30bf\u306e\u8868\u73fe<\/h3>\n\n\n\n<p>\u4e00\u6b21\u5143\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u4e8c\u6b21\u5143\u30c7\u30fc\u30bf\u3092\u8868\u73fe\u3059\u308b\u65b9\u6cd5\u306f\u3001\u30e1\u30e2\u30ea\u52b9\u7387\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u9762\u3067\u512a\u308c\u305f\u9078\u629e\u80a2\u3068\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;vector&gt;\n#include &lt;iostream&gt;\n#include &lt;cassert&gt;\n\ntemplate&lt;typename T&gt;\nclass FlatMatrix {\nprivate:\n    std::vector&lt;T&gt; data;\n    size_t rows;\n    size_t cols;\n\npublic:\n    FlatMatrix(size_t r, size_t c) \n        : data(r * c), rows(r), cols(c) {}\n\n    \/\/ \u8981\u7d20\u30a2\u30af\u30bb\u30b9\uff08\u5883\u754c\u30c1\u30a7\u30c3\u30af\u4ed8\u304d\uff09\n    T&amp; at(size_t i, size_t j) {\n        assert(i &lt; rows &amp;&amp; j &lt; cols &amp;&amp; \"Index out of bounds\");\n        return data[i * cols + j];\n    }\n\n    const T&amp; at(size_t i, size_t j) const {\n        assert(i &lt; rows &amp;&amp; j &lt; cols &amp;&amp; \"Index out of bounds\");\n        return data[i * cols + j];\n    }\n\n    \/\/ \u884c\u30b9\u30e9\u30a4\u30b9\u3092\u8fd4\u3059\n    std::vector&lt;T&gt; get_row(size_t i) const {\n        assert(i &lt; rows &amp;&amp; \"Row index out of bounds\");\n        return std::vector&lt;T&gt;(\n            data.begin() + i * cols,\n            data.begin() + (i + 1) * cols\n        );\n    }\n\n    \/\/ \u5217\u30b9\u30e9\u30a4\u30b9\u3092\u8fd4\u3059\n    std::vector&lt;T&gt; get_column(size_t j) const {\n        assert(j &lt; cols &amp;&amp; \"Column index out of bounds\");\n        std::vector&lt;T&gt; column(rows);\n        for (size_t i = 0; i &lt; rows; ++i) {\n            column[i] = at(i, j);\n        }\n        return column;\n    }\n\n    \/\/ \u30c7\u30fc\u30bf\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u76f4\u63a5\u53d6\u5f97\uff08\u9ad8\u901f\u306a\u64cd\u4f5c\u7528\uff09\n    T* data_ptr() { return data.data(); }\n    const T* data_ptr() const { return data.data(); }\n\n    \/\/ \u30b5\u30a4\u30ba\u60c5\u5831\n    size_t size() const { return data.size(); }\n    size_t num_rows() const { return rows; }\n    size_t num_cols() const { return cols; }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">STL\u30b3\u30f3\u30c6\u30ca\u3092\u6d3b\u7528\u3057\u305f\u67d4\u8edf\u306a\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>STL\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u67d4\u8edf\u306a\u4e8c\u6b21\u5143\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;map&gt;\n#include &lt;unordered_map&gt;\n#include &lt;list&gt;\n#include &lt;memory&gt;\n\n\/\/ \u30b9\u30d1\u30fc\u30b9\u884c\u5217\u306e\u5b9f\u88c5\u4f8b\ntemplate&lt;typename T&gt;\nclass SparseMatrix {\nprivate:\n    std::unordered_map&lt;size_t, std::unordered_map&lt;size_t, T&gt;&gt; data;\n    size_t rows;\n    size_t cols;\n    T default_value;\n\npublic:\n    SparseMatrix(size_t r, size_t c, const T&amp; default_val = T{})\n        : rows(r), cols(c), default_value(default_val) {}\n\n    \/\/ \u8981\u7d20\u30a2\u30af\u30bb\u30b9\n    T&amp; at(size_t i, size_t j) {\n        if (i &gt;= rows || j &gt;= cols) {\n            throw std::out_of_range(\"Index out of bounds\");\n        }\n        return data[i][j];\n    }\n\n    \/\/ \u8981\u7d20\u306e\u53d6\u5f97\uff08\u5b58\u5728\u3057\u306a\u3044\u8981\u7d20\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u8fd4\u3059\uff09\n    T get(size_t i, size_t j) const {\n        if (i &gt;= rows || j &gt;= cols) {\n            throw std::out_of_range(\"Index out of bounds\");\n        }\n        auto row_it = data.find(i);\n        if (row_it == data.end()) return default_value;\n\n        auto col_it = row_it-&gt;second.find(j);\n        if (col_it == row_it-&gt;second.end()) return default_value;\n\n        return col_it-&gt;second;\n    }\n\n    \/\/ \u975e\u30bc\u30ed\u8981\u7d20\u306e\u6570\u3092\u53d6\u5f97\n    size_t non_zero_count() const {\n        size_t count = 0;\n        for (const auto&amp; row : data) {\n            count += row.second.size();\n        }\n        return count;\n    }\n};\n\n\/\/ \u53ef\u5909\u30b5\u30a4\u30ba\u884c\u5217\u306e\u5b9f\u88c5\u4f8b\ntemplate&lt;typename T&gt;\nclass FlexibleMatrix {\nprivate:\n    std::list&lt;std::vector&lt;T&gt;&gt; rows;\n\npublic:\n    \/\/ \u884c\u306e\u8ffd\u52a0\n    void add_row(const std::vector&lt;T&gt;&amp; row) {\n        rows.push_back(row);\n    }\n\n    \/\/ \u884c\u306e\u524a\u9664\n    void remove_row(size_t index) {\n        auto it = rows.begin();\n        std::advance(it, index);\n        rows.erase(it);\n    }\n\n    \/\/ \u8981\u7d20\u30a2\u30af\u30bb\u30b9\n    T&amp; at(size_t i, size_t j) {\n        auto it = rows.begin();\n        std::advance(it, i);\n        if (j &gt;= it-&gt;size()) {\n            throw std::out_of_range(\"Column index out of bounds\");\n        }\n        return (*it)[j];\n    }\n};<\/pre>\n\n\n\n<p>\u5404\u5b9f\u88c5\u65b9\u6cd5\u306e\u7279\u5fb4\u6bd4\u8f03\uff1a<\/p>\n\n\n<div id=\"id-eca4166a-acf1-4938-9755-4323aeba8c93\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5b9f\u88c5\u65b9\u6cd5<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><th>\u30c7\u30e1\u30ea\u30c3\u30c8<\/th><th>\u9069\u7528\u5834\u9762<\/th><\/tr><\/thead><tbody><tr><td>\u4e00\u6b21\u5143\u914d\u5217<\/td><td>\u30fb\u30e1\u30e2\u30ea\u52b9\u7387\u304c\u826f\u3044<br>\u30fb\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u304c\u9ad8\u3044<br>\u30fb\u5b9f\u88c5\u304c\u30b7\u30f3\u30d7\u30eb<\/td><td>\u30fb\u30b5\u30a4\u30ba\u5909\u66f4\u304c\u96e3\u3057\u3044<br>\u30fb\u4e0d\u898f\u5247\u306a\u5f62\u72b6\u306b\u975e\u5bfe\u5fdc<\/td><td>\u30fb\u56fa\u5b9a\u30b5\u30a4\u30ba\u306e\u5bc6\u884c\u5217<br>\u30fb\u9ad8\u901f\u306a\u51e6\u7406\u304c\u5fc5\u8981\u306a\u5834\u5408<\/td><\/tr><tr><td>\u30b9\u30d1\u30fc\u30b9\u884c\u5217<\/td><td>\u30fb\u30e1\u30e2\u30ea\u4f7f\u7528\u52b9\u7387\u304c\u826f\u3044<br>\u30fb\u758e\u306a\u884c\u5217\u306b\u6700\u9069<br>\u30fb\u52d5\u7684\u306a\u30b5\u30a4\u30ba\u5909\u66f4\u53ef\u80fd<\/td><td>\u30fb\u8981\u7d20\u30a2\u30af\u30bb\u30b9\u304c\u9045\u3044<br>\u30fb\u30e1\u30e2\u30ea\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9<\/td><td>\u30fb\u758e\u884c\u5217\u306e\u51e6\u7406<br>\u30fb\u5927\u898f\u6a21\u306a\u758e\u30c7\u30fc\u30bf\u69cb\u9020<\/td><\/tr><tr><td>\u53ef\u5909\u30b5\u30a4\u30ba\u884c\u5217<\/td><td>\u30fb\u884c\u5358\u4f4d\u306e\u64cd\u4f5c\u304c\u5bb9\u6613<br>\u30fb\u4e0d\u898f\u5247\u306a\u5f62\u72b6\u306b\u5bfe\u5fdc<br>\u30fb\u52d5\u7684\u306a\u884c\u306e\u8ffd\u52a0\/\u524a\u9664<\/td><td>\u30fb\u30e1\u30e2\u30ea\u52b9\u7387\u304c\u4f4e\u3044<br>\u30fb\u30e9\u30f3\u30c0\u30e0\u30a2\u30af\u30bb\u30b9\u304c\u9045\u3044<\/td><td>\u30fb\u983b\u7e41\u306a\u884c\u306e\u8ffd\u52a0\/\u524a\u9664<br>\u30fb\u4e0d\u898f\u5247\u306a\u30c7\u30fc\u30bf\u69cb\u9020<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5b9f\u88c5\u9078\u629e\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u306e\u7279\u6027\u306b\u3088\u308b\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u306e\u5bc6\u5ea6\uff08\u758e\u304b\u5bc6\u304b\uff09<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u306e\u53ef\u5909\u6027<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8981\u4ef6\u306b\u3088\u308b\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u91cd\u8981\u5ea6<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30b9\u901f\u5ea6\u306e\u8981\u4ef6<\/li>\n\n\n\n<li>\u52d5\u7684\u64cd\u4f5c\u306e\u983b\u5ea6<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528\u5834\u9762\u306b\u3088\u308b\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u79d1\u5b66\u6280\u8853\u8a08\u7b97<\/li>\n\n\n\n<li>\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u51e6\u7406<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u89e3\u6790<\/li>\n\n\n\n<li>\u30b2\u30fc\u30e0\u958b\u767a<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u4ee3\u66ff\u5b9f\u88c5\u3092\u9069\u5207\u306b\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u3001\u7279\u5b9a\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u6700\u9069\u5316\u3055\u308c\u305f\u4e8c\u6b21\u5143\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">\u30c7\u30d0\u30c3\u30b0\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u3088\u304f\u3042\u308b\u30d0\u30b0\u3068\u5bfe\u51e6\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u4e8c\u6b21\u5143\u914d\u5217\u3092\u6271\u3046\u969b\u306b\u3088\u304f\u906d\u9047\u3059\u308b\u30d0\u30b0\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;iostream&gt;\n#include &lt;vector&gt;\n#include &lt;memory&gt;\n#include &lt;cassert&gt;\n\n\/\/ \u30c7\u30d0\u30c3\u30b0\u7528\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\ntemplate&lt;typename T&gt;\nvoid debug_print_matrix(const std::vector&lt;std::vector&lt;T&gt;&gt;&amp; matrix) {\n    std::cout &lt;&lt; \"Matrix dimensions: \" &lt;&lt; matrix.size() \n              &lt;&lt; \"x\" &lt;&lt; (matrix.empty() ? 0 : matrix[0].size()) &lt;&lt; \"\\n\";\n\n    for (const auto&amp; row : matrix) {\n        for (const auto&amp; elem : row) {\n            std::cout &lt;&lt; elem &lt;&lt; \"\\t\";\n        }\n        std::cout &lt;&lt; \"\\n\";\n    }\n    std::cout &lt;&lt; std::endl;\n}\n\n\/\/ \u4e00\u822c\u7684\u306a\u30d0\u30b0\u306e\u4f8b\u3068\u4fee\u6b63\u65b9\u6cd5\nclass MatrixDebugExample {\npublic:\n    \/\/ \u30d0\u30b01: \u7bc4\u56f2\u5916\u30a2\u30af\u30bb\u30b9\n    static void demonstrate_bounds_checking() {\n        std::vector&lt;std::vector&lt;int&gt;&gt; matrix(3, std::vector&lt;int&gt;(4, 0));\n\n        try {\n            \/\/ \u8aa4\u3063\u305f\u4f7f\u7528\u4f8b\n            matrix[3][0] = 1;  \/\/ \u7bc4\u56f2\u5916\u30a2\u30af\u30bb\u30b9\n        } catch (const std::out_of_range&amp; e) {\n            std::cerr &lt;&lt; \"Error: \" &lt;&lt; e.what() &lt;&lt; std::endl;\n        }\n\n        \/\/ \u6b63\u3057\u3044\u4f7f\u7528\u4f8b\uff08\u5883\u754c\u30c1\u30a7\u30c3\u30af\u4ed8\u304d\uff09\n        if (matrix.size() &gt; 3 &amp;&amp; matrix[3].size() &gt; 0) {\n            matrix[3][0] = 1;\n        }\n    }\n\n    \/\/ \u30d0\u30b02: \u4e0d\u5747\u4e00\u306a\u884c\u30b5\u30a4\u30ba\n    static void demonstrate_row_size_consistency() {\n        std::vector&lt;std::vector&lt;int&gt;&gt; matrix;\n        matrix.push_back({1, 2, 3});\n        matrix.push_back({4, 5});  \/\/ \u7570\u306a\u308b\u30b5\u30a4\u30ba\u306e\u884c\n\n        \/\/ \u554f\u984c\u306e\u691c\u51fa\n        bool is_uniform = true;\n        size_t expected_size = matrix[0].size();\n        for (const auto&amp; row : matrix) {\n            if (row.size() != expected_size) {\n                is_uniform = false;\n                break;\n            }\n        }\n\n        \/\/ \u4fee\u6b63\uff1a\u3059\u3079\u3066\u306e\u884c\u3092\u540c\u3058\u30b5\u30a4\u30ba\u306b\n        if (!is_uniform) {\n            for (auto&amp; row : matrix) {\n                row.resize(expected_size, 0);  \/\/ 0\u3067\u57cb\u3081\u308b\n            }\n        }\n    }\n\n    \/\/ \u30d0\u30b03: \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\n    static void demonstrate_memory_management() {\n        \/\/ \u60aa\u3044\u4f8b\uff1a\u751f\u30dd\u30a4\u30f3\u30bf\u306e\u4f7f\u7528\n        int** bad_matrix = new int*[5];\n        for (int i = 0; i &lt; 5; ++i) {\n            bad_matrix[i] = new int[4];\n        }\n\n        \/\/ \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u53ef\u80fd\u6027\uff08\u4f8b\u5916\u304c\u767a\u751f\u3057\u305f\u5834\u5408\uff09\n        try {\n            throw std::runtime_error(\"Simulated error\");\n        } catch (...) {\n            \/\/ \u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u304c\u5fc5\u8981\n            for (int i = 0; i &lt; 5; ++i) {\n                delete[] bad_matrix[i];\n            }\n            delete[] bad_matrix;\n            throw;  \/\/ \u4f8b\u5916\u3092\u518d\u30b9\u30ed\u30fc\n        }\n\n        \/\/ \u826f\u3044\u4f8b\uff1a\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u4f7f\u7528\n        auto good_matrix = std::make_unique&lt;std::vector&lt;std::vector&lt;int&gt;&gt;&gt;(\n            5, std::vector&lt;int&gt;(4, 0));\n        \/\/ \u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306f\u81ea\u52d5\u7684\u306b\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n    }\n};\n\n\/\/ \u30c7\u30d0\u30c3\u30b0\u7528\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\ntemplate&lt;typename T&gt;\nclass DebugMatrix {\nprivate:\n    std::vector&lt;std::vector&lt;T&gt;&gt; data;\n\npublic:\n    DebugMatrix(size_t rows, size_t cols) \n        : data(rows, std::vector&lt;T&gt;(cols)) {\n        \/\/ \u4e8b\u524d\u6761\u4ef6\u306e\u691c\u8a3c\n        assert(rows &gt; 0 &amp;&amp; cols &gt; 0 &amp;&amp; \"Matrix dimensions must be positive\");\n    }\n\n    T&amp; at(size_t i, size_t j) {\n        \/\/ \u5883\u754c\u30c1\u30a7\u30c3\u30af\n        assert(i &lt; data.size() &amp;&amp; \"Row index out of bounds\");\n        assert(j &lt; data[0].size() &amp;&amp; \"Column index out of bounds\");\n        return data[i][j];\n    }\n\n    \/\/ \u30c7\u30d0\u30c3\u30b0\u7528\u306e\u72b6\u614b\u691c\u8a3c\n    bool validate() const {\n        if (data.empty()) return false;\n\n        size_t expected_cols = data[0].size();\n        for (const auto&amp; row : data) {\n            if (row.size() != expected_cols) return false;\n        }\n        return true;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30e1\u30e2\u30ea\u95a2\u9023\u306e\u554f\u984c\u306e\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/h3>\n\n\n\n<p>\u30e1\u30e2\u30ea\u95a2\u9023\u306e\u554f\u984c\u3092\u52b9\u679c\u7684\u306b\u30c7\u30d0\u30c3\u30b0\u3059\u308b\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Valgrind\u3092\u4f7f\u7528\u3057\u305f\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u691c\u51fa<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u542b\u3081\u308b\ng++ -g matrix_debug.cpp -o matrix_debug\n\n# Valgrind\u3067\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u30c1\u30a7\u30c3\u30af\nvalgrind --leak-check=full .\/matrix_debug<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>AddressSanitizer\u3092\u4f7f\u7528\u3057\u305f\u30e1\u30e2\u30ea\u30a8\u30e9\u30fc\u306e\u691c\u51fa<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b-fsanitize=address\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\n\/\/ g++ -fsanitize=address matrix_debug.cpp -o matrix_debug\n\nint main() {\n    std::vector&lt;std::vector&lt;int&gt;&gt; matrix(3, std::vector&lt;int&gt;(4));\n\n    \/\/ \u30e1\u30e2\u30ea\u30a8\u30e9\u30fc\u306e\u4f8b\n    int* ptr = &amp;matrix[0][0];\n    ptr[16] = 1;  \/\/ \u7bc4\u56f2\u5916\u30a2\u30af\u30bb\u30b9 - ASAN\u304c\u691c\u51fa\n\n    return 0;\n}<\/pre>\n\n\n\n<p>\u30c7\u30d0\u30c3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e88\u9632\u7684\u30c7\u30d0\u30c3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u5883\u754c\u30c1\u30a7\u30c3\u30af\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u306e\u633f\u5165<\/li>\n\n\n\n<li>\u578b\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u554f\u984c\u767a\u898b\u6642\u306e\u5bfe\u5fdc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u8a73\u7d30\u306a\u89e3\u6790<\/li>\n\n\n\n<li>\u6700\u5c0f\u518d\u73fe\u30b1\u30fc\u30b9\u306e\u4f5c\u6210<\/li>\n\n\n\n<li>\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30ac\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u554f\u984c\u3078\u306e\u5bfe\u51e6<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>RAII\u30d1\u30bf\u30fc\u30f3\u306e\u9069\u7528<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u89e3\u6790\u30c4\u30fc\u30eb\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u4f8b\u5916\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u554f\u984c\u306e\u30c7\u30d0\u30c3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u5206\u6790<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u306e\u7279\u5b9a<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c7\u30d0\u30c3\u30b0\u6280\u8853\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4e8c\u6b21\u5143\u914d\u5217\u306b\u95a2\u3059\u308b\u554f\u984c\u3092\u52b9\u7387\u7684\u306b\u7279\u5b9a\u3057\u89e3\u6c7a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-2213","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2213"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2213\/revisions"}],"predecessor-version":[{"id":2214,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2213\/revisions\/2214"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}