Skip to content

Commit

Permalink
adjacent_findの動作イメージを付加
Browse files Browse the repository at this point in the history
  • Loading branch information
onihusube authored Nov 15, 2023
1 parent e6d487c commit 19d47d8
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
30 changes: 30 additions & 0 deletions reference/algorithm/adjacent_find.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,23 @@ namespace std {
## 概要
イテレータ範囲`[first, last)`から、隣接する要素で条件を満たしている最初の要素を検索する。
このアルゴリズムは、範囲の先頭から1つづつ進みながら隣接するペアに対して条件を満たすかをチェックし、その条件を満たす最初の要素へのイテレータを返す。指定された条件を満たしているかをチェックされるのは、現在位置にある要素とその次の位置にある要素の2つについてであり、1つの要素は最大2回参照される。
整数の配列`{1, 3, 3, 5, 0, 4, 5, 2}`を入力、指定された条件`pred`を[`std::greater<void>`](/reference/functional/greater.md)とした時の、チェックされる要素の様子
```
|0 1 2 3 4 5 6 7| : index
[1, 3, 3, 5, 0, 4, 5, 2] : input range
[1, 3] <- pred(1, 2) == false
[3, 3] <- pred(2, 2) == false
[3, 5] <- pred(2, 3) == false
[5, 0] <- pred(3, 0) == true
[0, 4]
[4, 5]
[5, 2]
```

この時、最初に条件を満たしたペアの左側の要素に対応するイテレータを返す。この例の場合、返される要素のイテレータは元の範囲で3番目の要素(0-indexed)であり、その値は`5`である。

## 戻り値
`[first,last)` 内にあるイテレータ i について、`*i == *(i + 1)` もしくは `pred(*i, *(i + 1)) != false` であるような最初のイテレータを返す。
Expand Down Expand Up @@ -85,6 +102,19 @@ found: index==2
*it == *(it+1): true
```

### 動作イメージ

```
|0 1 2 3 4 5 6| : index
[1, 4, 3, 3, 1, 2, 2] : input range
[1, 4]
[4, 3]
[3, 3] <- pred(3, 3) == true
[3, 1]
[1, 2]
[2, 2]
```

## 実装例
```cpp
template <class ForwardIterator>
Expand Down
31 changes: 31 additions & 0 deletions reference/algorithm/ranges_adjacent_find.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,24 @@ namespace std::ranges {
- (1): イテレータ範囲を指定する
- (2): Rangeを直接指定する
このアルゴリズムは、範囲の先頭から1つづつ進みながら隣接するペアに対して条件を満たすかをチェックし、その条件を満たす最初の要素へのイテレータを返す。指定された条件を満たしているかをチェックされるのは、現在位置にある要素とその次の位置にある要素の2つについてであり、1つの要素は最大2回参照される。
整数の配列`{1, 3, 3, 5, 0, 4, 5, 2}`を入力、指定された条件`pred`を[`std::greater<void>`](/reference/functional/greater.md)とした時の、チェックされる要素の様子
```
|0 1 2 3 4 5 6 7| : index
[1, 3, 3, 5, 0, 4, 5, 2] : input range
[1, 3] <- pred(1, 2) == false
[3, 3] <- pred(2, 2) == false
[3, 5] <- pred(2, 3) == false
[5, 0] <- pred(3, 0) == true
[0, 4]
[4, 5]
[5, 2]
```

この時、最初に条件を満たしたペアの左側の要素に対応するイテレータを返す。この例の場合、返される要素のイテレータは元の範囲で3番目の要素(0-indexed)であり、その値は`5`である。


## 戻り値
`[first,last)` 内にあるイテレータ i について、[`invoke`](/reference/functional/invoke.md)`(pred, `[`invoke`](/reference/functional/invoke.md)`(proj, *i), `[`invoke`](/reference/functional/invoke.md)`(proj, *(i + 1))) != false` であるような最初のイテレータを返す。
Expand Down Expand Up @@ -79,6 +97,19 @@ found: index==2
*it == *(it+1): true
```

### 動作イメージ

```
|0 1 2 3 4 5 6| : index
[1, 4, 3, 3, 1, 2, 2] : input range
[1, 4]
[4, 3]
[3, 3] <- pred(3, 3) == true
[3, 1]
[1, 2]
[2, 2]
```

## 実装例
```cpp
struct adjacent_find_impl {
Expand Down

0 comments on commit 19d47d8

Please sign in to comment.