diff --git a/reference/algorithm/ranges_shift_left.md b/reference/algorithm/ranges_shift_left.md index 468fc8311..9e567fde3 100644 --- a/reference/algorithm/ranges_shift_left.md +++ b/reference/algorithm/ranges_shift_left.md @@ -45,7 +45,7 @@ namespace std::ranges { ## 効果 -- `n <= 0`である場合、なにもしない +- `n == 0`である場合、なにもしない - `n >= last - first`である場合、なにもしない - `i < (last - first) - n`である非負の各`i`について、`first + n + i`位置の要素を`first + i`位置にムーブする - (1)では、`i = 0`から`i = (last - first) - n - 1`の順に処理する @@ -65,7 +65,7 @@ namespace std::ranges { ## 備考 -- シフト数として負数を指定するとなにも起こらないが、この関数には符号付き整数型を指定することとなっている。これは、Bidirectional Iterator向けの最適化した実装をする場合に[`std::prev()`](/reference/iterator/prev.md)関数を使用するため、そちらのパラメータ型と合わせたことによる +- シフト数として負数を指定することはできないが、この関数には符号付き整数型を指定することとなっている。これは、Bidirectional Iterator向けの最適化した実装をする場合に[`std::prev()`](/reference/iterator/prev.md)関数を使用するため、そちらのパラメータ型と合わせたことによる - `shift_left()`と[`shift_right()`](ranges_shift_right.md)で関数が分かれているのは、コンパイルしたコードサイズを小さくするためと、左シフトと右シフトでは最大パフォーマンスのための実装が異なるためである diff --git a/reference/algorithm/ranges_shift_right.md b/reference/algorithm/ranges_shift_right.md index d536d557a..8ff494298 100644 --- a/reference/algorithm/ranges_shift_right.md +++ b/reference/algorithm/ranges_shift_right.md @@ -46,7 +46,7 @@ namespace std::ranges { ## 効果 -- `n <= 0`である場合、なにもしない +- `n == 0`である場合、なにもしない - `n >= last - first`である場合、なにもしない - `i < (last - first) - n`である非負の各`i`について、`first + i`位置の要素を`first + n + i`位置にムーブする - (1)では、`I`型が[`bidirectional_iterator`](/reference/iterator/bidirectional_iterator.md)のモデルとなる場合は、`i = (last - first) - n - 1`から`i = 0`の順に処理する @@ -66,7 +66,7 @@ namespace std::ranges { ## 備考 -- シフト数として負数を指定するとなにも起こらないが、この関数には符号付き整数型を指定することとなっている。これは、Bidirectional Iterator向けの最適化した実装をする場合に[`std::prev()`](/reference/iterator/prev.md)関数を使用するため、そちらのパラメータ型と合わせたことによる +- シフト数として負数を指定することはできないが、この関数には符号付き整数型を指定することとなっている。これは、Bidirectional Iterator向けの最適化した実装をする場合に[`std::prev()`](/reference/iterator/prev.md)関数を使用するため、そちらのパラメータ型と合わせたことによる - [`shift_left()`](ranges_shift_left.md)と`shift_right()`で関数が分かれているのは、コンパイルしたコードサイズを小さくするためと、左シフトと右シフトでは最大パフォーマンスのための実装が異なるためである diff --git a/reference/algorithm/shift_left.md b/reference/algorithm/shift_left.md index 25010f71a..d4534a50b 100644 --- a/reference/algorithm/shift_left.md +++ b/reference/algorithm/shift_left.md @@ -34,8 +34,12 @@ namespace std { - `*first`の型が[ムーブ代入可能](/reference/type_traits/is_move_assignable.md)であること +## 事前条件 +`n >= 0` + + ## 効果 -- `n <= 0`である場合、なにもしない +- `n == 0`である場合、なにもしない - `n >= last - first`である場合、なにもしない - `i < (last - first) - n`である非負の各`i`について、`first + n + i`位置の要素を`first + i`位置にムーブする - (1)では、`i = 0`から`i = (last - first) - n - 1`の順に処理する @@ -52,7 +56,7 @@ namespace std { ## 備考 -- シフト数として負数を指定するとなにも起こらないが、この関数には符号付き整数型を指定することとなっている。これは、Bidirectional Iterator向けの最適化した実装をする場合に[`std::prev()`](/reference/iterator/prev.md)関数を使用するため、そちらのパラメータ型と合わせたことによる +- シフト数として負数を指定することはできないが、この関数には符号付き整数型を指定することとなっている。これは、Bidirectional Iterator向けの最適化した実装をする場合に[`std::prev()`](/reference/iterator/prev.md)関数を使用するため、そちらのパラメータ型と合わせたことによる - `shift_left()`と[`shift_right()`](shift_right.md)で関数が分かれているのは、コンパイルしたコードサイズを小さくするためと、左シフトと右シフトでは最大パフォーマンスのための実装が異なるためである diff --git a/reference/algorithm/shift_right.md b/reference/algorithm/shift_right.md index 06fe7d1ac..13ac718fb 100644 --- a/reference/algorithm/shift_right.md +++ b/reference/algorithm/shift_right.md @@ -35,8 +35,12 @@ namespace std { - `ForwardIterator`型が、Bidirectional Iteratorの要件もしくは[ValueSwappable](/reference/concepts/ValueSwappable.md)の要件を満たすこと +## 事前条件 +`n >= 0` + + ## 効果 -- `n <= 0`である場合、なにもしない +- `n == 0`である場合、なにもしない - `n >= last - first`である場合、なにもしない - `i < (last - first) - n`である非負の各`i`について、`first + i`位置の要素を`first + n + i`位置にムーブする - (1)では、`ForwardIterator`型がBidirectional Iteratorの要件を満たす場合は、`i = (last - first) - n - 1`から`i = 0`の順に処理する @@ -53,7 +57,7 @@ namespace std { ## 備考 -- シフト数として負数を指定するとなにも起こらないが、この関数には符号付き整数型を指定することとなっている。これは、Bidirectional Iterator向けの最適化した実装をする場合に[`std::prev()`](/reference/iterator/prev.md)関数を使用するため、そちらのパラメータ型と合わせたことによる +- シフト数として負数を指定することはできないが、この関数には符号付き整数型を指定することとなっている。これは、Bidirectional Iterator向けの最適化した実装をする場合に[`std::prev()`](/reference/iterator/prev.md)関数を使用するため、そちらのパラメータ型と合わせたことによる - [`shift_left()`](shift_left.md)と`shift_right()`で関数が分かれているのは、コンパイルしたコードサイズを小さくするためと、左シフトと右シフトでは最大パフォーマンスのための実装が異なるためである