Skip to content

Commit a5b62f3

Browse files
committed
join_view : メンバ関数を追加 #713
1 parent ff88ad3 commit a5b62f3

File tree

6 files changed

+310
-5
lines changed

6 files changed

+310
-5
lines changed

reference/ranges/join_view.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ namespace std::ranges {
5151
5252
| 名前 | 説明 | 対応バージョン |
5353
|--------------------------------------------------|----------------------------------|----------------|
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 |
5858
5959
## 継承しているメンバ関数
6060
@@ -71,7 +71,7 @@ namespace std::ranges {
7171
7272
| 名前 | 説明 | 対応バージョン |
7373
|-------------------------------------------------------|------------------------------|----------------|
74-
| [`(deduction_guide)`](join_view/op_deduction_guide.md.nolink) | クラステンプレートの推論補助 | C++20 |
74+
| [`(deduction_guide)`](join_view/op_deduction_guide.md) | クラステンプレートの推論補助 | C++20 |
7575
7676
## 例
7777
```cpp example

reference/ranges/join_view/base.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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]

reference/ranges/join_view/begin.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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]

reference/ranges/join_view/end.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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]
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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]
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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]

0 commit comments

Comments
 (0)