6868
6969 </ head >
7070 < body >
71- < header data-kunai-mdinfo ="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "93f0b158e0bb885b2dcfb93a4373d7c615ca081f", "source": "#include <algorithm>\n#include <iostream>\n#include <array>\n\nint main() {\n constexpr std::array v = { 3, 1, 4 };\n const auto result = std::ranges::find(v, 1);\n if (result == v.end()) {\n std::cout << \"not found\" << std::endl;\n } else {\n std::cout << \"found: \" << *result << std::endl;\n }\n}\n"}], "page_id": ["reference", "algorithm", "ranges_find"]} ">
71+ < header data-kunai-mdinfo ="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "93f0b158e0bb885b2dcfb93a4373d7c615ca081f", "source": "#include <algorithm>\n#include <iostream>\n#include <array>\n\nint main() {\n constexpr std::array v = { 3, 1, 4 };\n const auto result = std::ranges::find(v, 1);\n if (result == v.end()) {\n std::cout << \"not found\" << std::endl;\n } else {\n std::cout << \"found: \" << *result << std::endl;\n }\n}\n"}, {"id": "7cfa05b38b67380cb15dc980f9d7b354d361758c", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n\nstruct Point {\n int x;\n int y;\n\n bool operator==(const Point& other) const = default;\n};\n\nint main() {\n std::vector<Point> v = {\n {1, 2},\n {3, 4},\n {5, 6}\n };\n\n auto it = std::ranges::find(v, {3, 4});\n if (it == v.end()) {\n std::cout << \"not found\" << std::endl;\n } else {\n std::cout << \"found: \" << it->x << \",\" << it->y << std::endl;\n }\n}\n"}], "page_id": ["reference", "algorithm", "ranges_find"]} ">
7272 < nav class ="navbar navbar-default " role ="navigation ">
7373 < div class ="container-fluid ">
7474 < div class ="navbar-header ">
188188
189189 < p class ="text-right "> < small >
190190 最終更新日時(UTC):
191- < span itemprop ="datePublished " content ="2024-07-07T06:36:42 ">
192- 2024年07月07日 06時36分42秒
191+ < span itemprop ="datePublished " content ="2025-05-23T07:13:32 ">
192+ 2025年05月23日 07時13分32秒
193193 </ span >
194194 < br />
195195 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
196- < span itemprop ="name "> suomesta </ span >
196+ < span itemprop ="name "> Akira Takahashi </ span >
197197 </ span >
198198 が更新
199199 </ small > </ p >
224224 < span class ="n "> S</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
225225 < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
226226 < span class ="n "> Proj</ span > < span class ="n "> proj</ span > < span class ="o "> =</ span > < span class ="p "> {});</ span > < span class ="c1 "> // (1) C++20</ span >
227+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../iterator/input_iterator.html "> input_iterator</ a > </ span > < span class ="n "> I</ span > < span class ="p "> ,</ span >
228+ < span class ="n "> < a href ="../iterator/sentinel_for.html "> sentinel_for</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="o "> ></ span > < span class ="n "> S</ span > < span class ="p "> ,</ span >
229+ < span class ="k "> class</ span > < span class ="nc "> Proj</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../functional/identity.html "> identity</ a > </ span > < span class ="p "> ,</ span >
230+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../iterator/projected_value_t.html "> projected_value_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="p "> ,</ span > < span class ="n "> Proj</ span > < span class ="o "> >></ span >
231+ < span class ="n "> requires</ span > < span class ="n "> < a href ="../iterator/indirect_binary_predicate.html "> indirect_binary_predicate</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../functional/ranges_equal_to.html "> ranges::equal_to</ a > </ span > < span class ="p "> ,</ span > < span class ="n "> < a href ="../iterator/projected.html "> projected</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="p "> ,</ span > < span class ="n "> Proj</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> *></ span >
232+ < span class ="k "> constexpr</ span > < span class ="n "> I</ span >
233+ < span class ="n "> find</ span > < span class ="p "> (</ span > < span class ="n "> I</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
234+ < span class ="n "> S</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
235+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
236+ < span class ="n "> Proj</ span > < span class ="n "> proj</ span > < span class ="o "> =</ span > < span class ="p "> {});</ span > < span class ="c1 "> // (1) C++26</ span >
227237
228238 < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/input_range.html "> input_range</ a > </ span > < span class ="n "> R</ span > < span class ="p "> ,</ span >
229239 < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="p "> ,</ span >
233243 < span class ="n "> find</ span > < span class ="p "> (</ span > < span class ="n "> R</ span > < span class ="o "> &&</ span > < span class ="n "> r</ span > < span class ="p "> ,</ span >
234244 < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
235245 < span class ="n "> Proj</ span > < span class ="n "> proj</ span > < span class ="o "> =</ span > < span class ="p "> {});</ span > < span class ="c1 "> // (2) C++20</ span >
246+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/input_range.html "> input_range</ a > </ span > < span class ="n "> R</ span > < span class ="p "> ,</ span >
247+ < span class ="k "> class</ span > < span class ="nc "> Proj</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../functional/identity.html "> identity</ a > </ span > < span class ="p "> ,</ span >
248+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../iterator/projected_value_t.html "> projected_value_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/iterator_t.html "> iterator_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> R</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="n "> Proj</ span > < span class ="o "> >></ span >
249+ < span class ="n "> requires</ span > < span class ="n "> < a href ="../iterator/indirect_binary_predicate.html "> indirect_binary_predicate</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../functional/ranges_equal_to.html "> ranges::equal_to</ a > </ span > < span class ="p "> ,</ span > < span class ="n "> < a href ="../iterator/projected.html "> projected</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/iterator_t.html "> iterator_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> R</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="n "> Proj</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> *></ span >
250+ < span class ="k "> constexpr</ span > < span class ="n "> < a href ="../ranges/borrowed_iterator_t.html "> borrowed_iterator_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> R</ span > < span class ="o "> ></ span >
251+ < span class ="n "> find</ span > < span class ="p "> (</ span > < span class ="n "> R</ span > < span class ="o "> &&</ span > < span class ="n "> r</ span > < span class ="p "> ,</ span >
252+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
253+ < span class ="n "> Proj</ span > < span class ="n "> proj</ span > < span class ="o "> =</ span > < span class ="p "> {});</ span > < span class ="c1 "> // (2) C++26</ span >
236254< span class ="p "> }</ span >
237255</ code > </ pre > </ div >
238256</ p >
@@ -246,7 +264,20 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価
246264< p > < code > [first,last)</ code > あるいは < code > r</ code > 内のイテレータ i について、< code > < a href ="../functional/invoke.html "> invoke</ a > (proj, *i) == value</ code > であるような最初のイテレータを返す。そのようなイテレータが見つからなかった場合は < code > last</ code > を返す。</ p >
247265< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量 "> 計算量</ a > </ h2 >
248266< p > 最大で < code > last - first</ code > 回比較を行う</ p >
267+ < h2 > 備考</ h2 >
268+ < ul >
269+ < li > (1), (2) :< ul >
270+ < li > C++26 : 引数として波カッコ初期化< code > {}</ code > を受け付ける
271+ < br />
272+ < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="n "> < a href ="../vector/vector.html "> std::vector</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T</ span > < span class ="o "> ></ span > < span class ="n "> v</ span > < span class ="p "> ;</ span >
273+ < span class ="k "> auto</ span > < span class ="n "> it</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> ranges</ span > < span class ="o "> ::</ span > < span class ="n "> find</ span > < span class ="p "> (</ span > < span class ="n "> r</ span > < span class ="p "> ,</ span > < span class ="p "> {</ span > < span class ="n "> a</ span > < span class ="p "> ,</ span > < span class ="n "> b</ span > < span class ="p "> });</ span >
274+ </ code > </ pre > </ div >
275+ </ li >
276+ </ ul >
277+ </ li >
278+ </ ul >
249279< h2 > 例</ h2 >
280+ < h3 > 基本的な使い方</ h3 >
250281< p > < div class ="yata " id ="93f0b158e0bb885b2dcfb93a4373d7c615ca081f "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../algorithm.html "> <algorithm></ a > </ span > < span class ="cp "> </ span >
251282< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
252283< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../array.html "> <array></ a > </ span > < span class ="cp "> </ span >
@@ -262,9 +293,40 @@ <h2>例</h2>
262293< span class ="p "> }</ span >
263294</ code > </ pre > </ div >
264295</ div > </ p >
265- < h3 > 出力</ h3 >
296+ < h4 > 出力</ h4 >
266297< p > < pre > < code > found: 1
267298</ code > </ pre > </ p >
299+ < h3 > 波カッコ初期化を入力として使用する (C++26)</ h3 >
300+ < p > < div class ="yata " id ="7cfa05b38b67380cb15dc980f9d7b354d361758c "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../algorithm.html "> <algorithm></ a > </ span > < span class ="cp "> </ span >
301+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
302+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
303+
304+ < span class ="k "> struct</ span > < span class ="n "> Point</ span > < span class ="p "> {</ span >
305+ < span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> ;</ span >
306+ < span class ="kt "> int</ span > < span class ="n "> y</ span > < span class ="p "> ;</ span >
307+
308+ < span class ="kt "> bool</ span > < span class ="k "> operator</ span > < span class ="o "> ==</ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> Point</ span > < span class ="o "> &</ span > < span class ="n "> other</ span > < span class ="p "> )</ span > < span class ="k "> const</ span > < span class ="o "> =</ span > < span class ="k "> default</ span > < span class ="p "> ;</ span >
309+ < span class ="p "> };</ span >
310+
311+ < span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span > < span class ="p "> {</ span >
312+ < span class ="n "> < a href ="../vector/vector.html "> std::vector</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Point</ span > < span class ="o "> ></ span > < span class ="n "> v</ span > < span class ="o "> =</ span > < span class ="p "> {</ span >
313+ < span class ="p "> {</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> },</ span >
314+ < span class ="p "> {</ span > < span class ="mi "> 3</ span > < span class ="p "> ,</ span > < span class ="mi "> 4</ span > < span class ="p "> },</ span >
315+ < span class ="p "> {</ span > < span class ="mi "> 5</ span > < span class ="p "> ,</ span > < span class ="mi "> 6</ span > < span class ="p "> }</ span >
316+ < span class ="p "> };</ span >
317+
318+ < span class ="k "> auto</ span > < span class ="n "> it</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> std::ranges::find</ span > </ span > < span class ="p "> (</ span > < span class ="n "> v</ span > < span class ="p "> ,</ span > < span class ="p "> {</ span > < span class ="mi "> 3</ span > < span class ="p "> ,</ span > < span class ="mi "> 4</ span > < span class ="p "> });</ span >
319+ < span class ="k "> if</ span > < span class ="p "> (</ span > < span class ="n "> it</ span > < span class ="o "> ==</ span > < span class ="n "> < a href ="../vector/vector/end.html "> v.end()</ a > </ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
320+ < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "not found"</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
321+ < span class ="p "> }</ span > < span class ="k "> else</ span > < span class ="p "> {</ span >
322+ < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "found: "</ span > < span class ="o "> <<</ span > < span class ="n "> it</ span > < span class ="o "> -></ span > < span class ="n "> x</ span > < span class ="o "> <<</ span > < span class ="s "> ","</ span > < span class ="o "> <<</ span > < span class ="n "> it</ span > < span class ="o "> -></ span > < span class ="n "> y</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
323+ < span class ="p "> }</ span >
324+ < span class ="p "> }</ span >
325+ </ code > </ pre > </ div >
326+ </ div > </ p >
327+ < h4 > 出力</ h4 >
328+ < p > < pre > < code > found: 3,4
329+ </ code > </ pre > </ p >
268330< h2 > 実装例</ h2 >
269331< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> struct</ span > < span class ="n "> find_impl</ span > < span class ="p "> {</ span >
270332 < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../iterator/input_iterator.html "> input_iterator</ a > </ span > < span class ="n "> I</ span > < span class ="p "> ,</ span > < span class ="n "> < a href ="../iterator/sentinel_for.html "> sentinel_for</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="o "> ></ span > < span class ="n "> S</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> Proj</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../functional/identity.html "> identity</ a > </ span > < span class ="o "> ></ span >
@@ -300,6 +362,10 @@ <h3>処理系</h3>
300362< h2 > 参照</ h2 >
301363< ul >
302364< li > < a href ="https://timsong-cpp.github.io/cppwp/n4861/algorithms " target ="_blank "> N4861 25 Algorithms library</ a > </ li >
365+ < li > < a href ="https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html " target ="_blank "> P2248R8 Enabling list-initialization for algorithms</ a > < ul >
366+ < li > C++26で波カッコ初期化 (リスト初期化) に対応した</ li >
367+ </ ul >
368+ </ li >
303369</ ul > </ div >
304370
305371 </ div >
0 commit comments