Skip to content

Commit

Permalink
basic_const_iterator : ++ -- += -= 追加 #1084
Browse files Browse the repository at this point in the history
  • Loading branch information
onihusube committed Aug 2, 2023
1 parent 4a6b82e commit 92d8962
Show file tree
Hide file tree
Showing 5 changed files with 288 additions and 4 deletions.
8 changes: 4 additions & 4 deletions reference/iterator/basic_const_iterator.md
Expand Up @@ -24,11 +24,11 @@ namespace std {
| [`base`](basic_const_iterator/base.md) | 元のイテレータを取得する | C++23 |
| [`operator*`](basic_const_iterator/op_deref.md) | 間接参照演算子 | C++23 |
| [`operator->`](basic_const_iterator/op_arrow.md) | メンバアクセス演算子 | C++23 |
| [`operator++`](basic_const_iterator/op_increment.md.nolink) | イテレータをインクリメントする | C++23 |
| [`operator--`](basic_const_iterator/op_decrement.md.nolink) | イテレータをデクリメントする | C++23 |
| [`operator+=`](basic_const_iterator/op_plus_assign.md.nolink) | イテレータ自身を進める | C++23 |
| [`operator++`](basic_const_iterator/op_increment.md) | イテレータをインクリメントする | C++23 |
| [`operator--`](basic_const_iterator/op_decrement.md) | イテレータをデクリメントする | C++23 |
| [`operator+=`](basic_const_iterator/op_plus_assign.md) | イテレータ自身を進める | C++23 |
| [`operator-`](basic_const_iterator/op_unary_minus.md.nolink) | イテレータを逆に進める | C++23 |
| [`operator-=`](basic_const_iterator/op_minus_assign.md.nolink) | イテレータ自身を逆に進める | C++23 |
| [`operator-=`](basic_const_iterator/op_minus_assign.md) | イテレータ自身を逆に進める | C++23 |
| [`operator[]`](basic_const_iterator/op_at.md.nolink) | 任意の位置にランダムアクセスする | C++23 |
| [`operator==`](basic_const_iterator/op_equal.md.nolink) | 等値比較 | C++23 |
| [`operator!=`](basic_const_iterator/op_equal.md.nolink) | 非等値比較 | C++23 |
Expand Down
78 changes: 78 additions & 0 deletions reference/iterator/basic_const_iterator/op_decrement.md
@@ -0,0 +1,78 @@
# operator--
* iterator[meta header]
* std[meta namespace]
* basic_const_iterator[meta class]
* function[meta id-type]
* cpp23[meta cpp]

```cpp
constexpr basic_const_iterator& operator--() requires bidirectional_iterator<Iterator>; // (1)

constexpr basic_const_iterator operator--(int) requires bidirectional_iterator<Iterator>; // (2)
```
* bidirectional_iterator[link ./bidirectional_iterator.md]

## 概要

イテレータをデクリメントする。

- (1) : 前置デクリメント
- (2) : 後置デクリメント

## 効果

ラップするイテレータを`current_`というメンバに保持するとして

- (1) : 以下と等価
```cpp
--current_;
return *this;
```
- (2) : 以下と等価
```cpp
auto tmp = *this;
--*this;
return tmp;
```

##
```cpp example
#include <iostream>
#include <iterator>

int main() {
std::vector vec = {1, 2, 3, 4, 5};

std::basic_const_iterator cit = vec.end();

--cit;

std::cout << *cit << '\n';

cit--;

std::cout << *cit << '\n';

}
```
* --ci[color ff0000]
* ci--[color ff0000]

### 出力
```
5
4
```

## バージョン
### 言語
- C++23

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): 13.1
- [Visual C++](/implementation.md#visual_cpp): 2022 Update 6

## 参照

- [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html)
79 changes: 79 additions & 0 deletions reference/iterator/basic_const_iterator/op_increment.md
@@ -0,0 +1,79 @@
# operator++
* iterator[meta header]
* std[meta namespace]
* basic_const_iterator[meta class]
* function[meta id-type]
* cpp23[meta cpp]

```cpp
constexpr basic_const_iterator& operator++(); // (1)

constexpr void operator++(int); // (2)
constexpr basic_const_iterator operator++(int) requires forward_iterator<Iterator>; // (3)
```
* forward_iterator[link ./forward_iterator.md]

## 概要

イテレータをインクリメントする。

- (1) : 前置デクリメント
- (2)(3) : 後置デクリメント

## 効果

ラップするイテレータを`current_`というメンバに保持するとして

- (1) : 以下と等価
```cpp
++current_;
return *this;
```
- (2) : `++current_;`
- (3) : 以下と等価
```cpp
auto tmp = *this;
++*this;
return tmp;
```

##
```cpp example
#include <iostream>
#include <iterator>

int main() {
std::vector vec = {1, 2, 3, 4, 5};

std::basic_const_iterator cit = vec.begin();

++cit;

std::cout << *cit << '\n';

cit++;

std::cout << *cit << '\n';
}
```
* ++cit[color ff0000]
* cit++[color ff0000]

### 出力
```
2
3
```

## バージョン
### 言語
- C++23

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): 13.1
- [Visual C++](/implementation.md#visual_cpp): 2022 Update 6

## 参照

- [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html)
63 changes: 63 additions & 0 deletions reference/iterator/basic_const_iterator/op_minus_assign.md
@@ -0,0 +1,63 @@
# operator-=
* iterator[meta header]
* std[meta namespace]
* basic_const_iterator[meta class]
* function[meta id-type]
* cpp23[meta cpp]

```cpp
constexpr basic_const_iterator& operator-=(difference_type n)
requires random_access_iterator<Iterator>;
```
* random_access_iterator[link /reference/iterator/random_access_iterator.md]

## 概要

イテレータを`n`回逆に進める。

## 効果

ラップするイテレータを`current_`というメンバに保持するとして、 以下と等価

```cpp
current -= n;
return *this;
```

## 戻り値

`*this`

##
```cpp example
#include <iostream>
#include <iterator>

int main() {
std::vector vec = {1, 2, 3, 4, 5};

std::basic_const_iterator cit = vec.end();

cit -= 2;

std::cout << *cit << '\n';
}
```

### 出力
```
4
```

## バージョン
### 言語
- C++23

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): 13.1
- [Visual C++](/implementation.md#visual_cpp): 2022 Update 6

## 参照

- [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html)
64 changes: 64 additions & 0 deletions reference/iterator/basic_const_iterator/op_plus_assign.md
@@ -0,0 +1,64 @@
# operator+=
* iterator[meta header]
* std[meta namespace]
* basic_const_iterator[meta class]
* function[meta id-type]
* cpp23[meta cpp]

```cpp
constexpr basic_const_iterator& operator+=(difference_type n)
requires random_access_iterator<Iterator>;
```
* random_access_iterator[link /reference/iterator/random_access_iterator.md]


## 概要

イテレータを`n`回進める。

## 事前条件

現在のカウントの値を`length`メンバ変数に保持するとして、`n <= length`

## 効果

ラップするイテレータを`current_`というメンバに保持するとして、 以下と等価

```cpp
current += n;
return *this;
```

##
```cpp example
#include <iostream>
#include <iterator>

int main() {
std::vector vec = {1, 2, 3, 4, 5};

std::basic_const_iterator cit = vec.begin();

cit += 2;

std::cout << *cit << '\n';
}
```

### 出力
```
3
```

## バージョン
### 言語
- C++23

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): 13.1
- [Visual C++](/implementation.md#visual_cpp): 2022 Update 6

## 参照

- [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html)

0 comments on commit 92d8962

Please sign in to comment.