|
68 | 68 |
|
69 | 69 | </head> |
70 | 70 | <body> |
71 | | -<header data-kunai-mdinfo="{"meta": {"header": ["generator"], "id-type": ["class template"], "namespace": ["std"], "cpp": ["cpp23"]}, "sources": [{"id": "ecab885884bd18f44953a55fe6ebab39ddd0fd15", "source": "#include <generator>\n#include <ranges>\n#include <iostream>\n\n// \u5076\u6570\u5024\u5217\u3092\u7121\u9650\u751f\u6210\u3059\u308b\u30b3\u30eb\u30fc\u30c1\u30f3\nstd::generator<int> evens()\n{\n int n = 0;\n while (true) {\n co_yield n;\n n += 2;\n }\n}\n\nint main()\n{\n // \u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306b\u3088\u308a\u751f\u6210\u3055\u308c\u308bRange\u306e\u3046\u3061\n // \u5148\u982d\u304b\u30895\u500b\u307e\u3067\u306e\u8981\u7d20\u5024\u3092\u5217\u6319\u3059\u308b\n for (int n : evens() | std::views::take(5)) {\n std::cout << n << std::endl;\n }\n}\n"}, {"id": "03a2910e503e17fc0c29ff40ea6be1973073a859", "source": "#include <generator>\n#include <iostream>\n#include <list>\n#include <ranges>\n#include <vector>\n\n// Range\u306e\u8981\u7d20\u5024\u3092\u9010\u6b21\u751f\u6210\u3059\u308b\u30b3\u30eb\u30fc\u30c1\u30f3\nstd::generator<int> ints()\n{\n int arr[] = {1, 2, 3};\n co_yield std::ranges::elements_of(arr);\n std::vector<int> vec = {4, 5, 6};\n co_yield std::ranges::elements_of(vec);\n std::list<int> lst = {7, 8, 9};\n co_yield std::ranges::elements_of(lst);\n}\n\nint main()\n{\n for (int n : ints()) {\n std::cout << n << ' ';\n }\n}\n"}, {"id": "0244c20c28c805764a6df1ab70fa57b55253dca7", "source": "#include <generator>\n#include <iostream>\n#include <ranges>\n#include <memory>\n\n// \u4e8c\u5206\u6728\u30ce\u30fc\u30c9\nstruct node {\n int value;\n std::unique_ptr<node> left = nullptr;\n std::unique_ptr<node> right = nullptr;\n};\n\n// \u4e8c\u5206\u6728\u3092\u8d70\u67fb: \u5de6(left)\u2192\u81ea\u30ce\u30fc\u30c9\u2192\u53f3(right)\nstd::generator<int> traverse(const node& e)\n{\n if (e.left) {\n co_yield std::ranges::elements_of(traverse(*e.left));\n }\n co_yield e.value;\n if (e.right) {\n co_yield std::ranges::elements_of(traverse(*e.right));\n }\n}\n\nint main()\n{\n // tree:\n // 2\n // / \u00a5\n // 1 4\n // / \u00a5\n // 3 5\n node tree = {\n 2,\n std::make_unique<node>(1),\n std::make_unique<node>(\n 4,\n std::make_unique<node>(3),\n std::make_unique<node>(5)\n ),\n };\n\n for (int n: traverse(tree)) {\n std::cout << n << std::endl;\n }\n}\n"}, {"id": "756f5011931d68b80b0a20f185be0e7c2f91328b", "source": "#include <iostream>\n#include <generator>\n#include <ranges>\n#include <string>\n#include <string_view>\n#include <vector>\n\n// Ref=string_view, V=string \u306e\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30b3\u30eb\u30fc\u30c1\u30f3\nauto fizzbuzz() ->\n std::generator<std::string_view, std::string>\n{\n for (size_t i = 1; ; ++i) {\n if (i % 15 == 0) {\n co_yield \"FizzBuzz\";\n } else if (i % 3 == 0) {\n co_yield \"Fizz\";\n } else if (i % 5 == 0) {\n co_yield \"Buzz\";\n } else {\n co_yield std::to_string(i);\n }\n }\n}\n\nint main()\n{\n // std::ranges::to<C>() \u306f\u5909\u63db\u5143Range\u306e range_value_t \u3092\u5229\u7528\u3057\u3066\u623b\u308a\u5024\u578b\u3092\u6c7a\u5b9a\u3059\u308b\u3002\n // \u3053\u3053\u3067\u306f std::vector<std::string> \u578b\u3092\u5c0e\u51fa\u3059\u308b\u305f\u3081\u306b\u3001\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30b3\u30eb\u30fc\u30c1\u30f3\u306e\n // \u7b2c2\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf V = std::string \u3068\u3057\u3066\u660e\u793a\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002\n auto vec = fizzbuzz() | std::views::take(15) | std::ranges::to<std::vector>();\n\n // \u3082\u3057 fizzbuzz() \u623b\u308a\u5024\u578b\u304c std::generator<std::string_view> \u3067\u3042\u3063\u305f\u5834\u5408\u3001\n // \u5909\u6570 vec \u306f std::vector<std::string_view> \u578b\u3068\u306a\u308b\u3002\u3053\u306e\u3068\u304d\u30b3\u30eb\u30fc\u30c1\u30f3\u5185\u90e8\u5b9f\u88c5\u306e\n // std::to_string() \u306e\u623b\u308a\u5024 std::string \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306fco_yield\u5f0f\u672b\u5c3e\u3067\u5bff\u547d\u304c\u5207\u308c\u308b\u305f\u3081\u3001\n // \u5404\u8981\u7d20 vec[i] \u306b\u683c\u7d0d\u3055\u308c\u308b std::string_view \u306f\u30c0\u30f3\u30b0\u30ea\u30f3\u30b0(dangling)\u72b6\u614b\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u3002\n\n for (const auto& e : vec) {\n std::cout << e << std::endl;\n }\n}\n"}], "page_id": ["reference", "generator", "generator"]}"> |
| 71 | +<header data-kunai-mdinfo="{"meta": {"header": ["generator"], "id-type": ["class template"], "namespace": ["std"], "cpp": ["cpp23"]}, "sources": [{"id": "ecab885884bd18f44953a55fe6ebab39ddd0fd15", "source": "#include <generator>\n#include <ranges>\n#include <iostream>\n\n// \u5076\u6570\u5024\u5217\u3092\u7121\u9650\u751f\u6210\u3059\u308b\u30b3\u30eb\u30fc\u30c1\u30f3\nstd::generator<int> evens()\n{\n int n = 0;\n while (true) {\n co_yield n;\n n += 2;\n }\n}\n\nint main()\n{\n // \u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306b\u3088\u308a\u751f\u6210\u3055\u308c\u308bRange\u306e\u3046\u3061\n // \u5148\u982d\u304b\u30895\u500b\u307e\u3067\u306e\u8981\u7d20\u5024\u3092\u5217\u6319\u3059\u308b\n for (int n : evens() | std::views::take(5)) {\n std::cout << n << std::endl;\n }\n}\n"}, {"id": "03a2910e503e17fc0c29ff40ea6be1973073a859", "source": "#include <generator>\n#include <iostream>\n#include <list>\n#include <ranges>\n#include <vector>\n\n// Range\u306e\u8981\u7d20\u5024\u3092\u9010\u6b21\u751f\u6210\u3059\u308b\u30b3\u30eb\u30fc\u30c1\u30f3\nstd::generator<int> ints()\n{\n int arr[] = {1, 2, 3};\n co_yield std::ranges::elements_of(arr);\n std::vector<int> vec = {4, 5, 6};\n co_yield std::ranges::elements_of(vec);\n std::list<int> lst = {7, 8, 9};\n co_yield std::ranges::elements_of(lst);\n}\n\nint main()\n{\n for (int n : ints()) {\n std::cout << n << ' ';\n }\n}\n"}, {"id": "0244c20c28c805764a6df1ab70fa57b55253dca7", "source": "#include <generator>\n#include <iostream>\n#include <ranges>\n#include <memory>\n\n// \u4e8c\u5206\u6728\u30ce\u30fc\u30c9\nstruct node {\n int value;\n std::unique_ptr<node> left = nullptr;\n std::unique_ptr<node> right = nullptr;\n};\n\n// \u4e8c\u5206\u6728\u3092\u8d70\u67fb: \u5de6(left)\u2192\u81ea\u30ce\u30fc\u30c9\u2192\u53f3(right)\nstd::generator<int> traverse(const node& e)\n{\n if (e.left) {\n co_yield std::ranges::elements_of(traverse(*e.left));\n }\n co_yield e.value;\n if (e.right) {\n co_yield std::ranges::elements_of(traverse(*e.right));\n }\n}\n\nint main()\n{\n // tree:\n // 2\n // / \u00a5\n // 1 4\n // / \u00a5\n // 3 5\n node tree = {\n 2,\n std::make_unique<node>(1),\n std::make_unique<node>(\n 4,\n std::make_unique<node>(3),\n std::make_unique<node>(5)\n ),\n };\n\n for (int n: traverse(tree)) {\n std::cout << n << std::endl;\n }\n}\n"}, {"id": "af4d406ed6b7a592492f2e377d090f1af3d91682", "source": "#include <iostream>\n#include <generator>\n#include <ranges>\n#include <string>\n#include <string_view>\n#include <vector>\n\n// Ref=string_view, V=string \u306e\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30b3\u30eb\u30fc\u30c1\u30f3\nauto fizzbuzz() ->\n std::generator<std::string_view, std::string>\n{\n for (size_t i = 1; ; ++i) {\n if (i % 15 == 0) {\n co_yield \"FizzBuzz\";\n } else if (i % 3 == 0) {\n co_yield \"Fizz\";\n } else if (i % 5 == 0) {\n co_yield \"Buzz\";\n } else {\n co_yield std::to_string(i);\n }\n }\n}\n\nint main()\n{\n // std::ranges::to<C>() \u306f\u5909\u63db\u5143Range\u306e range_value_t \u3092\u5229\u7528\u3057\u3066\u623b\u308a\u5024\u578b\u3092\u6c7a\u5b9a\u3059\u308b\u3002\n // \u3053\u3053\u3067\u306f std::vector<std::string> \u578b\u3092\u5c0e\u51fa\u3059\u308b\u305f\u3081\u306b\u3001\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30b3\u30eb\u30fc\u30c1\u30f3\u306e\n // \u7b2c2\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf V = std::string \u3068\u3057\u3066\u660e\u793a\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002\n auto vec = fizzbuzz() | std::views::take(15) | std::ranges::to<std::vector>();\n\n // \u3082\u3057 fizzbuzz() \u623b\u308a\u5024\u578b\u304c std::generator<std::string_view> \u3067\u3042\u3063\u305f\u5834\u5408\u3001\n // \u5909\u6570 vec \u306f std::vector<std::string_view> \u578b\u3068\u306a\u308b\u3002\u3053\u306e\u3068\u304d\u30b3\u30eb\u30fc\u30c1\u30f3\u5185\u90e8\u5b9f\u88c5\u306e\n // std::to_string() \u306e\u623b\u308a\u5024 std::string \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306fco_yield\u5f0f\u672b\u5c3e\u3067\u5bff\u547d\u304c\u5207\u308c\u308b\u305f\u3081\u3001\n // \u5404\u8981\u7d20 vec[i] \u306b\u683c\u7d0d\u3055\u308c\u308b std::string_view \u306f\u30c0\u30f3\u30b0\u30ea\u30f3\u30b0\u72b6\u614b\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u3002\n\n for (const auto& e : vec) {\n std::cout << e << std::endl;\n }\n}\n"}], "page_id": ["reference", "generator", "generator"]}"> |
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="2025-08-31T12:36:04"> |
192 | | - 2025年08月31日 12時36分04秒 |
| 191 | + <span itemprop="datePublished" content="2026-04-02T03:57:17"> |
| 192 | + 2026年04月02日 03時57分17秒 |
193 | 193 | </span> |
194 | 194 | <br/> |
195 | 195 | <span itemprop="author" itemscope itemtype="http://schema.org/Person"> |
196 | | - <span itemprop="name">Raclamusi</span> |
| 196 | + <span itemprop="name">teruyamato0731</span> |
197 | 197 | </span> |
198 | 198 | が更新 |
199 | 199 | </small></p> |
@@ -567,7 +567,7 @@ <h4>出力</h4> |
567 | 567 | 5 |
568 | 568 | </code></pre></p> |
569 | 569 | <h3>例4: 第2テンプレートパラメータVの利用</h3> |
570 | | -<p><div class="yata" id="756f5011931d68b80b0a20f185be0e7c2f91328b"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../iostream.html"><iostream></a></span> |
| 570 | +<p><div class="yata" id="af4d406ed6b7a592492f2e377d090f1af3d91682"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../iostream.html"><iostream></a></span> |
571 | 571 | <span class="cp">#include <a href="../generator.html"><generator></a></span> |
572 | 572 | <span class="cp">#include <a href="../ranges.html"><ranges></a></span> |
573 | 573 | <span class="cp">#include <a href="../string.html"><string></a></span> |
@@ -601,7 +601,7 @@ <h3>例4: 第2テンプレートパラメータVの利用</h3> |
601 | 601 | <span class="w"> </span><span class="c1">// もし fizzbuzz() 戻り値型が <span style="color:#ff0000">std::generator</span><<a href="../string_view/basic_string_view.html">std::string_view</a>> であった場合、</span> |
602 | 602 | <span class="w"> </span><span class="c1">// 変数 vec は <a href="../vector/vector.html">std::vector</a><<a href="../string_view/basic_string_view.html">std::string_view</a>> 型となる。このときコルーチン内部実装の</span> |
603 | 603 | <span class="w"> </span><span class="c1">// <a href="../string/to_string.html">std::to_string</a>() の戻り値 <a href="../string/basic_string.html">std::string</a> オブジェクトは<a href="../../lang/cpp20/coroutines.html">co_yield</a>式末尾で寿命が切れるため、</span> |
604 | | -<span class="w"> </span><span class="c1">// 各要素 vec[i] に格納される <a href="../string_view/basic_string_view.html">std::string_view</a> はダングリング(dangling)状態になってしまう。</span> |
| 604 | +<span class="w"> </span><span class="c1">// 各要素 vec[i] に格納される <a href="../string_view/basic_string_view.html">std::string_view</a> はダングリング状態になってしまう。</span> |
605 | 605 |
|
606 | 606 | <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">vec</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
607 | 607 | <span class="w"> </span><span class="n"><a href="../iostream/cout.html">std::cout</a></span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
|
0 commit comments