Skip to content

Commit

Permalink
add append_range, assign_range, insert_range and prepend_range to std…
Browse files Browse the repository at this point in the history
…::list
  • Loading branch information
suomesta committed Aug 11, 2024
1 parent 774a74a commit 1a35e93
Show file tree
Hide file tree
Showing 5 changed files with 260 additions and 0 deletions.
4 changes: 4 additions & 0 deletions reference/list/list.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ namespace std {
| [`(destructor)`](list/op_destructor.md) | デストラクタ | |
| [`operator=`](list/op_assign.md) | 代入演算子 | |
| [`assign`](list/assign.md) | コンテナの再代入 | |
| [`assign_range`](list/assign_range.md) | Rangeの要素を再代入 | C++23 |
### イテレータ
Expand Down Expand Up @@ -77,10 +78,13 @@ namespace std {
|-----------------|--------------------------------|-------|
| [`push_front`](list/push_front.md) | 先頭に要素を追加する | |
| [`emplace_front`](list/emplace_front.md) | 先頭への直接構築による要素追加 | C++11 |
| [`prepend_range`](list/prepend_range.md) | 先頭にRangeの要素を追加する | C++23 |
| [`push_back`](list/push_back.md) | 末尾に要素を追加する | |
| [`emplace_back`](list/emplace_back.md) | 末尾への直接構築による要素追加 | C++11 |
| [`append_range`](list/append_range.md) | 末尾にRangeの要素を追加する | C++23 |
| [`insert`](list/insert.md) | 要素の挿入 | |
| [`emplace`](list/emplace.md) | 要素の直接構築による挿入 | C++11 |
| [`insert_range`](list/insert_range.md) | 任意の位置にRangeの要素を挿入する | C++23 |
| [`pop_front`](list/pop_front.md) | 先頭から要素を削除 | |
| [`pop_back`](list/pop_back.md) | 末尾から要素を削除 | |
| [`erase`](list/erase.md) | 要素の削除 | |
Expand Down
65 changes: 65 additions & 0 deletions reference/list/list/append_range.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# append_range
* list[meta header]
* std[meta namespace]
* list[meta class]
* function template[meta id-type]
* cpp23[meta cpp]

```cpp
template <container-compatible-range<T> R>
void append_range(R&& rg); // C++23
```
## 概要
Rangeの要素を末尾へ追加する。
## テンプレートパラメータ制約
型`T`が`*ranges::begin(rg)`から`list`コンテナへの`EmplaceConstructible`であること。
## 効果
Range`rg`の各要素を、末尾に追加する。
## 戻り値
なし
## 計算量
`N =` [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)`とすると、`N`に比例。Tのコンストラクタは`N`回呼ばれる。
## 例
```cpp example
#include <iostream>
#include <list>
int main()
{
std::list<int> lst = {1, 2, 3};
const int a[3] = {4, 5, 6};
// Rangeを末尾に追加
lst.append_range(a);
for (int i : lst) {
std::cout << i << " ";
}
std::cout << std::endl;
}
```
* append_range[color ff0000]

### 出力
```
1 2 3 4 5 6
```


## 関連項目

| 名前 | 説明 |
|-------------------------------------------|----------------------|
| [`push_back`](push_back.md) | 末尾に要素を追加する |
| [`emplace_back`](emplace_back.md) | 末尾に要素を直接構築で追加する |
64 changes: 64 additions & 0 deletions reference/list/list/assign_range.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# assign_range
* list[meta header]
* std[meta namespace]
* list[meta class]
* function template[meta id-type]
* cpp23[meta cpp]

```cpp
template <container-compatible-range<T> R>
void assign_range(R&& rg); // C++23
```
## 概要
Rangeの各要素を再代入する。
## 事前条件
`*this` の要素の範囲と Range`rg` の要素の範囲が重複していないこと
## テンプレートパラメータ制約
型`T`が`*ranges::begin(rg)`から`list`コンテナへの`EmplaceConstructible`であること。
## 効果
Range`rg`の各要素を、再代入する。
## 戻り値
なし
## 例
```cpp example
#include <iostream>
#include <list>
int main()
{
std::list<int> lst = {1, 2, 3};
const int a[3] = {4, 5, 6};
// Rangeを再代入
lst.assign_range(a);
for (int i : lst) {
std::cout << i << " ";
}
std::cout << std::endl;
}
```
* assign_range[color ff0000]

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


## 関連項目

| 名前 | 説明 |
|-------------------------------------------|----------------------|
| [`assign`](assign.md) | コンテナに値を代入する |
62 changes: 62 additions & 0 deletions reference/list/list/insert_range.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# insert_range
* list[meta header]
* std[meta namespace]
* list[meta class]
* function template[meta id-type]
* cpp23[meta cpp]

```cpp
template <container-compatible-range<T> R>
iterator insert_range(const_iterator pos, R&& rg); // C++23
```
## 概要
Rangeの各要素を任意の位置に挿入する。
## テンプレートパラメータ制約
型`T`が`*ranges::begin(rg)`から`list`コンテナへの`EmplaceConstructible`であること。
## 効果
Range`rg`の各要素を、`pos`の直前に挿入する。
## 戻り値
挿入されたRange`rg`の最初の要素を指すイテレータ。`rg`が空の場合は`pos`。
## 例
```cpp example
#include <iostream>
#include <iterator>
#include <list>
int main()
{
std::list<int> lst = {1, 2, 3};
const int a[3] = {4, 5, 6};
// Rangeを1番目と2番目の要素の間に挿入
lst.insert_range(std::next(lst.begin()), a);
for (int i : lst) {
std::cout << i << " ";
}
std::cout << std::endl;
}
```
* insert_range[color ff0000]

### 出力
```
1 4 5 6 2 3
```


## 関連項目

| 名前 | 説明 |
|-------------------------------------------|----------------------|
| [`insert`](insert.md) | 任意の位置に要素を挿入する |
| [`emplace`](emplace.md) | 任意の位置に要素を直接構築で挿入する |
65 changes: 65 additions & 0 deletions reference/list/list/prepend_range.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# prepend_range
* list[meta header]
* std[meta namespace]
* list[meta class]
* function template[meta id-type]
* cpp23[meta cpp]

```cpp
template <container-compatible-range<T> R>
void prepend_range(R&& rg); // C++23
```
## 概要
先頭にRangeの要素を追加する。
## テンプレートパラメータ制約
型`T`が`*ranges::begin(rg)`から`list`コンテナへの`EmplaceConstructible`であること。
## 効果
Range`rg`の各要素を、先頭に追加する。
## 戻り値
なし
## 計算量
`N =` [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)`とすると、`N`に比例。Tのコンストラクタは`N`回呼ばれる。
## 例
```cpp example
#include <iostream>
#include <list>
int main()
{
std::list<int> lst = {1, 2, 3};
const int a[3] = {4, 5, 6};
// Rangeを先頭に追加
lst.prepend_range(a);
for (int i : lst) {
std::cout << i << " ";
}
std::cout << std::endl;
}
```
* prepend_range[color ff0000]

### 出力
```
4 5 6 1 2 3
```


## 関連項目

| 名前 | 説明 |
|-------------------------------------------|----------------------|
| [`push_front`](push_front.md) | 先頭に要素を追加する |
| [`emplace_front`](emplace_front.md) | 先頭に要素を直接構築で追加する |

0 comments on commit 1a35e93

Please sign in to comment.