55
66``` cpp
77namespace std {
8- template <class InputIterator, class T>
8+ template <class InputIterator,
9+ class T>
910 typename iterator_traits<InputIterator >::difference_type
1011 count(InputIterator first,
1112 InputIterator last,
1213 const T& value); // (1) C++03
13-
14- template <class InputIterator, class T>
14+ template <class InputIterator,
15+ class T>
1516 constexpr typename iterator_traits<InputIterator >::difference_type
1617 count(InputIterator first,
1718 InputIterator last,
1819 const T& value); // (1) C++20
20+ template <class InputIterator,
21+ class T = typename iterator_traits<InputIterator >::value_type>
22+ constexpr typename iterator_traits<InputIterator >::difference_type
23+ count(InputIterator first,
24+ InputIterator last,
25+ const T& value); // (1) C++26
1926
20- template<class ExecutionPolicy, class ForwardIterator, class T>
27+ template <class ExecutionPolicy,
28+ class ForwardIterator,
29+ class T>
2130 typename iterator_traits<ForwardIterator >::difference_type
2231 count(ExecutionPolicy&& exec,
2332 ForwardIterator first,
2433 ForwardIterator last,
2534 const T& value); // (2) C++17
35+ template <class ExecutionPolicy,
36+ class ForwardIterator,
37+ class T = typename iterator_traits<ForwardIterator >::value_type>
38+ typename iterator_traits<ForwardIterator >::difference_type
39+ count(ExecutionPolicy&& exec,
40+ ForwardIterator first,
41+ ForwardIterator last,
42+ const T& value); // (2) C++16
2643}
2744```
2845* iterator_traits[link /reference/iterator/iterator_traits.md]
@@ -39,7 +56,16 @@ namespace std {
3956正確に `last - first` 回の比較を行う
4057
4158
59+ ## 備考
60+ - (1), (2) :
61+ - C++26 : 引数として波カッコ初期化`{}`を受け付ける
62+ ```cpp
63+ std::vector<T> v;
64+ int n = std::count(v.begin(), v.begin(), {a, b});
65+ ```
66+
4267## 例
68+ ### 基本的な使い方
4369```cpp example
4470#include <algorithm>
4571#include <iostream>
@@ -49,16 +75,50 @@ int main() {
4975 std::vector<int> v = { 1,4,3,3,1,2,2,1 };
5076
5177 // 値が 1 の要素がいくつあるかを数える
52- std::cout << "count of 1: " << std::count(v.begin(), v.end(), 1) << std::endl;
78+ int n = std::count(v.begin(), v.end(), 1);
79+ std::cout << "count of 1: " << n << std::endl;
5380}
5481```
5582* std::count[ color ff0000]
5683
57- ### 出力
84+ #### 出力
5885```
5986count of 1: 3
6087```
6188
89+ ### 波カッコ初期化を入力として使用する (C++26)
90+ ``` cpp example
91+ #include < algorithm>
92+ #include < iostream>
93+ #include < vector>
94+
95+ struct Point {
96+ int x;
97+ int y;
98+
99+ bool operator==(const Point& other) const = default;
100+ };
101+
102+ int main() {
103+ std::vector<Point > v = {
104+ {1, 2},
105+ {3, 4},
106+ {5, 6},
107+ {1, 2},
108+ };
109+
110+ // 値が {1, 2} の要素がいくつあるかを数える
111+ int n = std::count(v.begin(), v.end(), {1, 2});
112+ std::cout << "count of {1,2}: " << n << std::endl;
113+ }
114+ ```
115+ * std::count[color ff0000]
116+
117+ #### 出力
118+ ```
119+ count of {1,2}: 2
120+ ```
121+
62122
63123## 実装例
64124```cpp
@@ -85,3 +145,5 @@ typename iterator_traits<InputIterator>::difference_type
85145## 参照
86146- [ P0202R3 Add Constexpr Modifiers to Functions in ` <algorithm> ` and ` <utility> ` Headers] ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0202r3.html )
87147- [ P0467R2 Iterator Concerns for Parallel Algorithms] ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0467r2.html )
148+ - [ P2248R8 Enabling list-initialization for algorithms] ( https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html )
149+ - C++26で波カッコ初期化 (リスト初期化) に対応した
0 commit comments