|
68 | 68 |
|
69 | 69 | </head> |
70 | 70 | <body> |
71 | | -<header data-kunai-mdinfo="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "53465b82ec9f0bd288c699e2bed1f28e0429213a", "source": "#include <cassert>\n#include <algorithm>\n\nint main()\n{\n int x = 10;\n auto result1 = std::ranges::minmax(x, 11); // decltype(result1) == std::ranges::minmax_result<const int&>\n assert(result1.min == 10); // ok: result1.min \u306f x\u3092\u53c2\u7167\u3057\u3066\u3044\u308b\n //assert(result1.max == 11); // \u672a\u5b9a\u7fa9\u52d5\u4f5c : result1.max\u306f\u5bff\u547d\u304c\u5c3d\u304d\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8(\u53f3\u8fba\u502411)\u3092\u6307\u3057\u3066\u3044\u308b\u305f\u3081\u3001\n // \u305d\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u306f\u306a\u3089\u306a\u3044\n\n // \u69cb\u9020\u5316\u675f\u7e1b\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u3082\u540c\u69d8\u306b\u672a\u5b9a\u7fa9\u52d5\u4f5c\u3092\u5f15\u304d\u8d77\u3053\u3059\n // auto [min_val, max_val] = std::ranges::minmax(x, 11);\n // max_val; // \u672a\u5b9a\u7fa9\u52d5\u4f5c : \u53f3\u8fba\u502411\u306e\u5bff\u547d\u306f\u5c3d\u304d\u3066\u3044\u308b\n\n // \u521d\u671f\u5316\u5b50\u30ea\u30b9\u30c8\u3084Range\u3092\u6e21\u3059\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9(2), (3)\u3067\u306f\u3001\u5024\u304c\u8fd4\u3055\u308c\u308b\u305f\u3081\u554f\u984c\u306a\u3044\n auto result2 = std::ranges::minmax({x, 11}); // decltype(result2) == std::ranges::minmax_result<int>\n assert(result2.min == 10); // ok: result2.min \u306f x\u306e\u30b3\u30d4\u30fc\u3092\u6301\u3063\u3066\u3044\u308b\n assert(result2.max == 11); // ok: result2.max \u306f \u53f3\u8fba\u502411\u306e\u30b3\u30d4\u30fc\u3092\u6301\u3063\u3066\u3044\u308b\n}\n"}, {"id": "9a58b13d8f0a47189c7c3a8d331caf2669f5252f", "source": "#include <array>\n#include <cassert>\n#include <algorithm>\n#include <functional>\n\nint main()\n{\n const auto result1 = std::ranges::minmax(2, 3);\n assert(result1.min == 2 && result1.max == 3);\n\n const auto result2 = std::ranges::minmax(2, 3, std::ranges::greater());\n assert(result2.min == 3 && result2.max == 2);\n\n constexpr auto result3 = std::ranges::minmax({1, 2, 3});\n static_assert(result3.min == 1 && result3.max == 3);\n\n constexpr std::array<int, 3> a = {1, 2, 3};\n\n constexpr auto result4 = std::ranges::minmax(a, std::ranges::greater());\n static_assert(result4.min == 3 && result4.max == 1);\n}\n"}, {"id": "dc42bede395e6c17be9958143560fb63f1036eb7", "source": "#include <algorithm>\n#include <execution>\n#include <iostream>\n#include <vector>\n\nint main() {\n std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};\n\n // \u4e26\u5217\u306b\u6700\u5c0f\u5024\u3068\u6700\u5927\u5024\u3092\u53d6\u5f97\n auto [min_val, max_val] = std::ranges::minmax(std::execution::par, v);\n std::cout << min_val << \", \" << max_val << std::endl;\n}\n"}], "page_id": ["reference", "algorithm", "ranges_minmax"]}"> |
| 71 | +<header data-kunai-mdinfo="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "53465b82ec9f0bd288c699e2bed1f28e0429213a", "source": "#include <cassert>\n#include <algorithm>\n\nint main()\n{\n int x = 10;\n auto result1 = std::ranges::minmax(x, 11); // decltype(result1) == std::ranges::minmax_result<const int&>\n assert(result1.min == 10); // ok: result1.min \u306f x\u3092\u53c2\u7167\u3057\u3066\u3044\u308b\n //assert(result1.max == 11); // \u672a\u5b9a\u7fa9\u52d5\u4f5c : result1.max\u306f\u5bff\u547d\u304c\u5c3d\u304d\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8(\u53f3\u8fba\u502411)\u3092\u6307\u3057\u3066\u3044\u308b\u305f\u3081\u3001\n // \u305d\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u306f\u306a\u3089\u306a\u3044\n\n // \u69cb\u9020\u5316\u675f\u7e1b\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u3082\u540c\u69d8\u306b\u672a\u5b9a\u7fa9\u52d5\u4f5c\u3092\u5f15\u304d\u8d77\u3053\u3059\n // auto [min_val, max_val] = std::ranges::minmax(x, 11);\n // max_val; // \u672a\u5b9a\u7fa9\u52d5\u4f5c : \u53f3\u8fba\u502411\u306e\u5bff\u547d\u306f\u5c3d\u304d\u3066\u3044\u308b\n\n // \u521d\u671f\u5316\u5b50\u30ea\u30b9\u30c8\u3084Range\u3092\u6e21\u3059\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9(2), (3)\u3067\u306f\u3001\u5024\u304c\u8fd4\u3055\u308c\u308b\u305f\u3081\u554f\u984c\u306a\u3044\n auto result2 = std::ranges::minmax({x, 11}); // decltype(result2) == std::ranges::minmax_result<int>\n assert(result2.min == 10); // ok: result2.min \u306f x\u306e\u30b3\u30d4\u30fc\u3092\u6301\u3063\u3066\u3044\u308b\n assert(result2.max == 11); // ok: result2.max \u306f \u53f3\u8fba\u502411\u306e\u30b3\u30d4\u30fc\u3092\u6301\u3063\u3066\u3044\u308b\n}\n"}, {"id": "01692344d5d990952f1807f769901d95965e5eed", "source": "#include <algorithm>\n#include <array>\n#include <cassert>\n#include <functional>\n\nint main()\n{\n const int x = 2;\n const int y = 3;\n\n // (1) 2\u3064\u306e\u5024\u3092\u53d7\u3051\u53d6\u308b\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\n // \u53f3\u8fba\u5024(\u4e00\u6642\u30aa\u30d6\u30b8\u30a7\u30af\u30c8)\u3092\u6e21\u3059\u3068\u623b\u308a\u5024\u306e\u30e1\u30f3\u30d0\u304c\u30c0\u30f3\u30b0\u30ea\u30f3\u30b0\u53c2\u7167\u306b\u306a\u308b\u305f\u3081\u3001\u5de6\u8fba\u5024\u3092\u6e21\u3059\n const auto result1 = std::ranges::minmax(x, y);\n assert(result1.min == 2 && result1.max == 3);\n\n const auto result2 = std::ranges::minmax(x, y, std::ranges::greater());\n assert(result2.min == 3 && result2.max == 2);\n\n // NG! \u30c0\u30f3\u30b0\u30ea\u30f3\u30b0\u53c2\u7167\u304c\u767a\u751f\u3059\u308b\n // const auto result1 = std::ranges::minmax(2, 3);\n\n // (2) \u521d\u671f\u5316\u5b50\u30ea\u30b9\u30c8\u3092\u53d7\u3051\u53d6\u308b\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\n constexpr auto result3 = std::ranges::minmax({1, 2, 3});\n static_assert(result3.min == 1 && result3.max == 3);\n\n // \u69cb\u9020\u5316\u675f\u7e1b\u3082\u53ef\u80fd\n auto [min_val, max_val] = std::ranges::minmax({1, 2, 3}, std::ranges::greater());\n assert(min_val == 3 && max_val == 1);\n\n // (3) Range\u3092\u53d7\u3051\u53d6\u308b\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\n constexpr std::array<int, 3> a = {1, 2, 3};\n constexpr auto result4 = std::ranges::minmax(a, std::ranges::greater());\n static_assert(result4.min == 3 && result4.max == 1);\n}\n"}, {"id": "dc42bede395e6c17be9958143560fb63f1036eb7", "source": "#include <algorithm>\n#include <execution>\n#include <iostream>\n#include <vector>\n\nint main() {\n std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};\n\n // \u4e26\u5217\u306b\u6700\u5c0f\u5024\u3068\u6700\u5927\u5024\u3092\u53d6\u5f97\n auto [min_val, max_val] = std::ranges::minmax(std::execution::par, v);\n std::cout << min_val << \", \" << max_val << std::endl;\n}\n"}], "page_id": ["reference", "algorithm", "ranges_minmax"]}"> |
72 | 72 | <nav class="navbar navbar-default" role="navigation"> |
73 | 73 | <div class="container-fluid"> |
74 | 74 | <div class="navbar-header"> |
|
188 | 188 |
|
189 | 189 | <p class="text-right"><small> |
190 | 190 | 最終更新日時(UTC): |
191 | | - <span itemprop="datePublished" content="2026-04-01T10:36:52"> |
192 | | - 2026年04月01日 10時36分52秒 |
| 191 | + <span itemprop="datePublished" content="2026-04-01T12:36:15"> |
| 192 | + 2026年04月01日 12時36分15秒 |
193 | 193 | </span> |
194 | 194 | <br/> |
195 | 195 | <span itemprop="author" itemscope itemtype="http://schema.org/Person"> |
@@ -302,24 +302,37 @@ <h2>備考</h2> |
302 | 302 | </div></p> |
303 | 303 | <h2>例</h2> |
304 | 304 | <h3>基本的な使い方</h3> |
305 | | -<p><div class="yata" id="9a58b13d8f0a47189c7c3a8d331caf2669f5252f"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../array.html"><array></a></span> |
| 305 | +<p><div class="yata" id="01692344d5d990952f1807f769901d95965e5eed"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../algorithm.html"><algorithm></a></span> |
| 306 | +<span class="cp">#include <a href="../array.html"><array></a></span> |
306 | 307 | <span class="cp">#include <a href="../cassert.html"><cassert></a></span> |
307 | | -<span class="cp">#include <a href="../algorithm.html"><algorithm></a></span> |
308 | 308 | <span class="cp">#include <a href="../functional.html"><functional></a></span> |
309 | 309 |
|
310 | 310 | <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span> |
311 | 311 | <span class="p">{</span> |
312 | | -<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">result1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::ranges::minmax</span></span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span> |
| 312 | +<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> |
| 313 | +<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> |
| 314 | + |
| 315 | +<span class="w"> </span><span class="c1">// (1) 2つの値を受け取るオーバーロード</span> |
| 316 | +<span class="w"> </span><span class="c1">// 右辺値(一時オブジェクト)を渡すと戻り値のメンバがダングリング参照になるため、左辺値を渡す</span> |
| 317 | +<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">result1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::ranges::minmax</span></span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">);</span> |
313 | 318 | <span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n">result1</span><span class="p">.</span><span class="n">min</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">result1</span><span class="p">.</span><span class="n">max</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span> |
314 | 319 |
|
315 | | -<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">result2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::ranges::minmax</span></span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../functional/ranges_greater.html">std::ranges::greater</a></span><span class="p">());</span> |
| 320 | +<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">result2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::ranges::minmax</span></span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../functional/ranges_greater.html">std::ranges::greater</a></span><span class="p">());</span> |
316 | 321 | <span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n">result2</span><span class="p">.</span><span class="n">min</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">result2</span><span class="p">.</span><span class="n">max</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span> |
317 | 322 |
|
| 323 | +<span class="w"> </span><span class="c1">// NG! ダングリング参照が発生する</span> |
| 324 | +<span class="w"> </span><span class="c1">// const auto result1 = <span style="color:#ff0000">std::ranges::minmax</span>(2, 3);</span> |
| 325 | + |
| 326 | +<span class="w"> </span><span class="c1">// (2) 初期化子リストを受け取るオーバーロード</span> |
318 | 327 | <span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">result3</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::ranges::minmax</span></span><span class="p">({</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">});</span> |
319 | 328 | <span class="w"> </span><span class="k">static_assert</span><span class="p">(</span><span class="n">result3</span><span class="p">.</span><span class="n">min</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">result3</span><span class="p">.</span><span class="n">max</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span> |
320 | 329 |
|
321 | | -<span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="n"><a href="../array/array.html">std::array</a></span><span class="o"><</span><span class="kt">int</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="o">></span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">};</span> |
| 330 | +<span class="w"> </span><span class="c1">// 構造化束縛も可能</span> |
| 331 | +<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="p">[</span><span class="n">min_val</span><span class="p">,</span><span class="w"> </span><span class="n">max_val</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::ranges::minmax</span></span><span class="p">({</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">},</span><span class="w"> </span><span class="n"><a href="../functional/ranges_greater.html">std::ranges::greater</a></span><span class="p">());</span> |
| 332 | +<span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n">min_val</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">max_val</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> |
322 | 333 |
|
| 334 | +<span class="w"> </span><span class="c1">// (3) Rangeを受け取るオーバーロード</span> |
| 335 | +<span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="n"><a href="../array/array.html">std::array</a></span><span class="o"><</span><span class="kt">int</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="o">></span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">};</span> |
323 | 336 | <span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">result4</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::ranges::minmax</span></span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../functional/ranges_greater.html">std::ranges::greater</a></span><span class="p">());</span> |
324 | 337 | <span class="w"> </span><span class="k">static_assert</span><span class="p">(</span><span class="n">result4</span><span class="p">.</span><span class="n">min</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">result4</span><span class="p">.</span><span class="n">max</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> |
325 | 338 | <span class="p">}</span> |
|
0 commit comments