Skip to content

Commit 1a35e93

Browse files
committed
add append_range, assign_range, insert_range and prepend_range to std::list
1 parent 774a74a commit 1a35e93

File tree

5 files changed

+260
-0
lines changed

5 files changed

+260
-0
lines changed

reference/list/list.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ namespace std {
3737
| [`(destructor)`](list/op_destructor.md) | デストラクタ | |
3838
| [`operator=`](list/op_assign.md) | 代入演算子 | |
3939
| [`assign`](list/assign.md) | コンテナの再代入 | |
40+
| [`assign_range`](list/assign_range.md) | Rangeの要素を再代入 | C++23 |
4041
4142
4243
### イテレータ
@@ -77,10 +78,13 @@ namespace std {
7778
|-----------------|--------------------------------|-------|
7879
| [`push_front`](list/push_front.md) | 先頭に要素を追加する | |
7980
| [`emplace_front`](list/emplace_front.md) | 先頭への直接構築による要素追加 | C++11 |
81+
| [`prepend_range`](list/prepend_range.md) | 先頭にRangeの要素を追加する | C++23 |
8082
| [`push_back`](list/push_back.md) | 末尾に要素を追加する | |
8183
| [`emplace_back`](list/emplace_back.md) | 末尾への直接構築による要素追加 | C++11 |
84+
| [`append_range`](list/append_range.md) | 末尾にRangeの要素を追加する | C++23 |
8285
| [`insert`](list/insert.md) | 要素の挿入 | |
8386
| [`emplace`](list/emplace.md) | 要素の直接構築による挿入 | C++11 |
87+
| [`insert_range`](list/insert_range.md) | 任意の位置にRangeの要素を挿入する | C++23 |
8488
| [`pop_front`](list/pop_front.md) | 先頭から要素を削除 | |
8589
| [`pop_back`](list/pop_back.md) | 末尾から要素を削除 | |
8690
| [`erase`](list/erase.md) | 要素の削除 | |
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# append_range
2+
* list[meta header]
3+
* std[meta namespace]
4+
* list[meta class]
5+
* function template[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
template <container-compatible-range<T> R>
10+
void append_range(R&& rg); // C++23
11+
```
12+
13+
## 概要
14+
Rangeの要素を末尾へ追加する。
15+
16+
17+
## テンプレートパラメータ制約
18+
型`T`が`*ranges::begin(rg)`から`list`コンテナへの`EmplaceConstructible`であること。
19+
20+
21+
## 効果
22+
Range`rg`の各要素を、末尾に追加する。
23+
24+
25+
## 戻り値
26+
なし
27+
28+
29+
## 計算量
30+
`N =` [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)`とすると、`N`に比例。Tのコンストラクタは`N`回呼ばれる。
31+
32+
33+
## 例
34+
```cpp example
35+
#include <iostream>
36+
#include <list>
37+
38+
int main()
39+
{
40+
std::list<int> lst = {1, 2, 3};
41+
const int a[3] = {4, 5, 6};
42+
43+
// Rangeを末尾に追加
44+
lst.append_range(a);
45+
46+
for (int i : lst) {
47+
std::cout << i << " ";
48+
}
49+
std::cout << std::endl;
50+
}
51+
```
52+
* append_range[color ff0000]
53+
54+
### 出力
55+
```
56+
1 2 3 4 5 6
57+
```
58+
59+
60+
## 関連項目
61+
62+
| 名前 | 説明 |
63+
|-------------------------------------------|----------------------|
64+
| [`push_back`](push_back.md) | 末尾に要素を追加する |
65+
| [`emplace_back`](emplace_back.md) | 末尾に要素を直接構築で追加する |
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# assign_range
2+
* list[meta header]
3+
* std[meta namespace]
4+
* list[meta class]
5+
* function template[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
template <container-compatible-range<T> R>
10+
void assign_range(R&& rg); // C++23
11+
```
12+
13+
## 概要
14+
Rangeの各要素を再代入する。
15+
16+
17+
## 事前条件
18+
`*this` の要素の範囲と Range`rg` の要素の範囲が重複していないこと
19+
20+
21+
## テンプレートパラメータ制約
22+
型`T`が`*ranges::begin(rg)`から`list`コンテナへの`EmplaceConstructible`であること。
23+
24+
25+
## 効果
26+
Range`rg`の各要素を、再代入する。
27+
28+
29+
## 戻り値
30+
なし
31+
32+
33+
## 例
34+
```cpp example
35+
#include <iostream>
36+
#include <list>
37+
38+
int main()
39+
{
40+
std::list<int> lst = {1, 2, 3};
41+
const int a[3] = {4, 5, 6};
42+
43+
// Rangeを再代入
44+
lst.assign_range(a);
45+
46+
for (int i : lst) {
47+
std::cout << i << " ";
48+
}
49+
std::cout << std::endl;
50+
}
51+
```
52+
* assign_range[color ff0000]
53+
54+
### 出力
55+
```
56+
4 5 6
57+
```
58+
59+
60+
## 関連項目
61+
62+
| 名前 | 説明 |
63+
|-------------------------------------------|----------------------|
64+
| [`assign`](assign.md) | コンテナに値を代入する |
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# insert_range
2+
* list[meta header]
3+
* std[meta namespace]
4+
* list[meta class]
5+
* function template[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
template <container-compatible-range<T> R>
10+
iterator insert_range(const_iterator pos, R&& rg); // C++23
11+
```
12+
13+
## 概要
14+
Rangeの各要素を任意の位置に挿入する。
15+
16+
17+
## テンプレートパラメータ制約
18+
型`T`が`*ranges::begin(rg)`から`list`コンテナへの`EmplaceConstructible`であること。
19+
20+
21+
## 効果
22+
Range`rg`の各要素を、`pos`の直前に挿入する。
23+
24+
25+
## 戻り値
26+
挿入されたRange`rg`の最初の要素を指すイテレータ。`rg`が空の場合は`pos`。
27+
28+
29+
## 例
30+
```cpp example
31+
#include <iostream>
32+
#include <iterator>
33+
#include <list>
34+
35+
int main()
36+
{
37+
std::list<int> lst = {1, 2, 3};
38+
const int a[3] = {4, 5, 6};
39+
40+
// Rangeを1番目と2番目の要素の間に挿入
41+
lst.insert_range(std::next(lst.begin()), a);
42+
43+
for (int i : lst) {
44+
std::cout << i << " ";
45+
}
46+
std::cout << std::endl;
47+
}
48+
```
49+
* insert_range[color ff0000]
50+
51+
### 出力
52+
```
53+
1 4 5 6 2 3
54+
```
55+
56+
57+
## 関連項目
58+
59+
| 名前 | 説明 |
60+
|-------------------------------------------|----------------------|
61+
| [`insert`](insert.md) | 任意の位置に要素を挿入する |
62+
| [`emplace`](emplace.md) | 任意の位置に要素を直接構築で挿入する |
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# prepend_range
2+
* list[meta header]
3+
* std[meta namespace]
4+
* list[meta class]
5+
* function template[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
template <container-compatible-range<T> R>
10+
void prepend_range(R&& rg); // C++23
11+
```
12+
13+
## 概要
14+
先頭にRangeの要素を追加する。
15+
16+
17+
## テンプレートパラメータ制約
18+
型`T`が`*ranges::begin(rg)`から`list`コンテナへの`EmplaceConstructible`であること。
19+
20+
21+
## 効果
22+
Range`rg`の各要素を、先頭に追加する。
23+
24+
25+
## 戻り値
26+
なし
27+
28+
29+
## 計算量
30+
`N =` [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)`とすると、`N`に比例。Tのコンストラクタは`N`回呼ばれる。
31+
32+
33+
## 例
34+
```cpp example
35+
#include <iostream>
36+
#include <list>
37+
38+
int main()
39+
{
40+
std::list<int> lst = {1, 2, 3};
41+
const int a[3] = {4, 5, 6};
42+
43+
// Rangeを先頭に追加
44+
lst.prepend_range(a);
45+
46+
for (int i : lst) {
47+
std::cout << i << " ";
48+
}
49+
std::cout << std::endl;
50+
}
51+
```
52+
* prepend_range[color ff0000]
53+
54+
### 出力
55+
```
56+
4 5 6 1 2 3
57+
```
58+
59+
60+
## 関連項目
61+
62+
| 名前 | 説明 |
63+
|-------------------------------------------|----------------------|
64+
| [`push_front`](push_front.md) | 先頭に要素を追加する |
65+
| [`emplace_front`](emplace_front.md) | 先頭に要素を直接構築で追加する |

0 commit comments

Comments
 (0)