File tree Expand file tree Collapse file tree 6 files changed +310
-5
lines changed Expand file tree Collapse file tree 6 files changed +310
-5
lines changed Original file line number Diff line number Diff line change @@ -51,10 +51,10 @@ namespace std::ranges {
51
51
52
52
| 名前 | 説明 | 対応バージョン |
53
53
|--------------------------------------------------|----------------------------------|----------------|
54
- | [`(constructor)`](join_view/op_constructor.md.nolink ) | コンストラクタ | C++20 |
55
- | [`base`](join_view/base.md.nolink ) | `V`の参照を取得する | C++20 |
56
- | [`begin`](join_view/begin.md.nolink ) | 先頭を指すイテレータを取得する | C++20 |
57
- | [`end`](join_view/end.md.nolink ) | 番兵を取得する | C++20 |
54
+ | [`(constructor)`](join_view/op_constructor.md) | コンストラクタ | C++20 |
55
+ | [`base`](join_view/base.md) | `V`の参照を取得する | C++20 |
56
+ | [`begin`](join_view/begin.md) | 先頭を指すイテレータを取得する | C++20 |
57
+ | [`end`](join_view/end.md) | 番兵を取得する | C++20 |
58
58
59
59
## 継承しているメンバ関数
60
60
@@ -71,7 +71,7 @@ namespace std::ranges {
71
71
72
72
| 名前 | 説明 | 対応バージョン |
73
73
|-------------------------------------------------------|------------------------------|----------------|
74
- | [`(deduction_guide)`](join_view/op_deduction_guide.md.nolink ) | クラステンプレートの推論補助 | C++20 |
74
+ | [`(deduction_guide)`](join_view/op_deduction_guide.md) | クラステンプレートの推論補助 | C++20 |
75
75
76
76
## 例
77
77
```cpp example
Original file line number Diff line number Diff line change
1
+ # base
2
+ * ranges[ meta header]
3
+ * std::ranges[ meta namespace]
4
+ * join_view[ meta class]
5
+ * function[ meta id-type]
6
+ * cpp20[ meta cpp]
7
+
8
+ ``` cpp
9
+ constexpr V base () const &
10
+ requires copy_constructible<V>; // (1) C++20
11
+
12
+ constexpr V base () &&; // (2) C++20
13
+ ```
14
+
15
+ ## 概要
16
+
17
+ メンバ変数として保持している、元の` view ` を取得する。
18
+
19
+ ## 効果
20
+
21
+ 入力` view ` (` V ` )のオブジェクトを` base_ ` というメンバに保持するとして
22
+
23
+ - (1) : ` return base_; ` と等価
24
+ - (2) : ` return std::move(base_); ` と等価
25
+
26
+ ## 例
27
+
28
+ ``` cpp example
29
+ #include < ranges>
30
+ #include < vector>
31
+ #include < string>
32
+ #include < iostream>
33
+
34
+ int main () {
35
+ using std::ranges::view;
36
+
37
+ std::vector< std::string > words = {"hello", "world", "join"};
38
+
39
+ std::ranges::join_view r{words};
40
+
41
+ // (1) コピーして取得
42
+ view auto b1 = r.base();
43
+
44
+ // (2) ムーブして取得
45
+ view auto b2 = std::move(r).base();
46
+
47
+ // 得られるのは元のRangeではなく、あくまでview
48
+ static_assert (not std::same_as<decltype(b1), std::vector< std::string > >);
49
+ static_assert ( std::same_as<decltype(b1), std::ranges::ref_view< std::vector<std::string > >>);
50
+ static_assert ( std::same_as<decltype(b2), std::ranges::ref_view< std::vector<std::string > >>);
51
+ }
52
+ ```
53
+ * base[ color ff0000]
54
+
55
+ ### 出力
56
+
57
+ ```
58
+ ```
59
+
60
+ ## バージョン
61
+ ### 言語
62
+ - C++20
63
+
64
+ ### 処理系
65
+ - [ Clang] ( /implementation.md#clang ) : 13.0.0 [ mark verified]
66
+ - [ GCC] ( /implementation.md#gcc ) : 10.1.0 [ mark verified]
67
+ - [ ICC] ( /implementation.md#icc ) : ?
68
+ - [ Visual C++] ( /implementation.md#visual_cpp ) : 2019 Update 10 [ mark verified]
Original file line number Diff line number Diff line change
1
+ # begin
2
+ * ranges[ meta header]
3
+ * std::ranges[ meta namespace]
4
+ * join_view[ meta class]
5
+ * function[ meta id-type]
6
+ * cpp20[ meta cpp]
7
+
8
+ ``` cpp
9
+ constexpr auto begin ()
10
+ requires (!simple-view<V >); // (1) C++20
11
+
12
+ constexpr auto begin() const
13
+ requires range<const V > &&
14
+ input_range<range_reference_t<const V >>; // (2) C++20
15
+ ```
16
+
17
+ ## 概要
18
+
19
+ `view`の先頭要素を指すイテレータを取得する。
20
+
21
+ ## 戻り値
22
+ - (1), (2) : `join_view`の先頭を指すイテレータを返す。外側のRangeが空でない場合、最初の内側Rangeの先頭要素を指す。外側のRangeが空の場合、[`end()`](end.md)と等価なイテレータを返す。
23
+
24
+ ## 例
25
+
26
+ ```cpp example
27
+ #include <ranges>
28
+ #include <vector>
29
+ #include <string>
30
+ #include <iostream>
31
+
32
+ int main() {
33
+ std::vector<std::string> words = {"hello", "world", "join"};
34
+
35
+ std::ranges::join_view r{words};
36
+
37
+ auto it = r.begin();
38
+
39
+ char x = *it;
40
+ std::cout << x << '\n';
41
+ }
42
+ ```
43
+ * begin[ color ff0000]
44
+
45
+ ### 出力
46
+
47
+ ```
48
+ h
49
+ ```
50
+
51
+ ## バージョン
52
+ ### 言語
53
+ - C++20
54
+
55
+ ### 処理系
56
+ - [ Clang] ( /implementation.md#clang ) : 13.0.0 [ mark verified]
57
+ - [ GCC] ( /implementation.md#gcc ) : 10.1.0 [ mark verified]
58
+ - [ ICC] ( /implementation.md#icc ) : ?
59
+ - [ Visual C++] ( /implementation.md#visual_cpp ) : 2019 Update 10 [ mark verified]
Original file line number Diff line number Diff line change
1
+ # end
2
+ * ranges[ meta header]
3
+ * std::ranges[ meta namespace]
4
+ * join_view[ meta class]
5
+ * function[ meta id-type]
6
+ * cpp20[ meta cpp]
7
+
8
+ ``` cpp
9
+ constexpr auto end ()
10
+ requires (!simple-view<V >); // (1) C++20
11
+
12
+ constexpr auto end() const
13
+ requires range<const V > &&
14
+ input_range<range_reference_t<const V >>; // (2) C++20
15
+ ```
16
+
17
+ ## 概要
18
+ 番兵を取得する。
19
+
20
+ ## 戻り値
21
+ - (1), (2) : `join_view`の番兵を返す
22
+
23
+ ## 例
24
+
25
+ ```cpp example
26
+ #include <ranges>
27
+ #include <vector>
28
+ #include <string>
29
+ #include <iostream>
30
+
31
+ int main() {
32
+ std::vector<std::string> words = {"hello", "world", "join"};
33
+
34
+ std::ranges::join_view r{words};
35
+
36
+ auto it = r.begin();
37
+ auto end_it = r.end();
38
+ while (it != end_it) {
39
+ char x = *it;
40
+ std::cout << x;
41
+ ++it;
42
+ }
43
+ std::cout << std::endl;
44
+ }
45
+ ```
46
+ * end[ color ff0000]
47
+ * begin[ link begin.md]
48
+
49
+ ### 出力
50
+
51
+ ```
52
+ helloworldjoin
53
+ ```
54
+
55
+ ## バージョン
56
+ ### 言語
57
+ - C++20
58
+
59
+ ### 処理系
60
+ - [ Clang] ( /implementation.md#clang ) : 13.0.0 [ mark verified]
61
+ - [ GCC] ( /implementation.md#gcc ) : 10.1.0 [ mark verified]
62
+ - [ ICC] ( /implementation.md#icc ) : ?
63
+ - [ Visual C++] ( /implementation.md#visual_cpp ) : 2019 Update 10 [ mark verified]
Original file line number Diff line number Diff line change
1
+ # コンストラクタ
2
+ * ranges[ meta header]
3
+ * std::ranges[ meta namespace]
4
+ * join_view[ meta class]
5
+ * function[ meta id-type]
6
+ * cpp20[ meta cpp]
7
+
8
+ ``` cpp
9
+ join_view ()
10
+ requires default_initializable<V> = default; // (1) C++20
11
+
12
+ constexpr explicit join_view (V base); // (2) C++20
13
+ ```
14
+
15
+ ## 概要
16
+
17
+ [`join_view`](../join_view.md)オブジェクトを構築する。
18
+
19
+ - (1) : デフォルト構築
20
+ - (2) : 元となるviewを指定して構築
21
+
22
+ ## 効果
23
+
24
+ - (1) : `base_`をデフォルト構築する
25
+ - (2) : `base_`を`std::move(base)`で初期化する
26
+
27
+ ## 例
28
+ ```cpp example
29
+ #include <iostream>
30
+ #include <ranges>
31
+ #include <vector>
32
+ #include <string>
33
+
34
+ int main() {
35
+ std::vector<std::string> words = {"hello", "world", "join"};
36
+
37
+ std::ranges::join_view view{words};
38
+ for (char c : view) {
39
+ std::cout << c;
40
+ }
41
+ std::cout << std::endl;
42
+ }
43
+ ```
44
+ * join_view[ color ff0000]
45
+
46
+ ### 出力
47
+ ```
48
+ helloworldjoin
49
+ ```
50
+
51
+ ## バージョン
52
+ ### 言語
53
+ - C++20
54
+
55
+ ### 処理系
56
+ - [ Clang] ( /implementation.md#clang ) : 13.0.0 [ mark verified]
57
+ - [ GCC] ( /implementation.md#gcc ) : 10.1.0 [ mark verified]
58
+ - [ ICC] ( /implementation.md#icc ) : ?
59
+ - [ Visual C++] ( /implementation.md#visual_cpp ) : 2019 Update 10 [ mark verified]
Original file line number Diff line number Diff line change
1
+ # 推論補助
2
+ * ranges[ meta header]
3
+ * std::ranges[ meta namespace]
4
+ * function[ meta id-type]
5
+ * cpp20[ meta cpp]
6
+
7
+ ``` cpp
8
+ namespace std ::ranges {
9
+ template<class R >
10
+ join_view(R&&) -> join_view< views::all_t<R > >;
11
+ }
12
+ ```
13
+
14
+ ## 概要
15
+
16
+ [`join_view`](../join_view.md)クラステンプレートの型推論補助。
17
+
18
+ この推論補助によって、元のRangeが暗黙的に[all view](../all.md)でラップされる。
19
+
20
+ ## 例
21
+ ```cpp example
22
+ #include <ranges>
23
+ #include <vector>
24
+ #include <string>
25
+ #include <concepts>
26
+
27
+ int main() {
28
+ std::vector<std::string> words = {"hello", "world", "join"};
29
+
30
+ std::ranges::join_view r1{words};
31
+ static_assert(std::same_as<
32
+ decltype(r1),
33
+ std::ranges::join_view<std::ranges::ref_view<std::vector<std::string>>>
34
+ >);
35
+
36
+ std::ranges::join_view r2{std::vector<std::string>{"a", "b", "c"}};
37
+ static_assert(std::same_as<
38
+ decltype(r2),
39
+ std::ranges::join_view<std::ranges::owning_view<std::vector<std::string>>>
40
+ >);
41
+ }
42
+ ```
43
+
44
+ ### 出力
45
+ ```
46
+ ```
47
+
48
+ ## バージョン
49
+ ### 言語
50
+ - C++20
51
+
52
+ ### 処理系
53
+ - [ Clang] ( /implementation.md#clang ) : 13.0.0 [ mark verified]
54
+ - [ GCC] ( /implementation.md#gcc ) : 10.1.0 [ mark verified]
55
+ - [ ICC] ( /implementation.md#icc ) : ?
56
+ - [ Visual C++] ( /implementation.md#visual_cpp ) : 2019 Update 10 [ mark verified]
You can’t perform that action at this time.
0 commit comments