Skip to content

Commit 774a74a

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

File tree

5 files changed

+260
-0
lines changed

5 files changed

+260
-0
lines changed

reference/deque/deque.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ namespace std {
4848
| [`(destructor)`](deque/op_destructor.md) | デストラクタ | |
4949
| [`operator=`](deque/op_assign.md) | 代入演算子 | |
5050
| [`assign`](deque/assign.md) | コンテナに値を代入する | |
51+
| [`assign_range`](deque/assign_range.md) | コンテナにRangeの要素を代入する | C++23 |
5152
| [`get_allocator`](deque/get_allocator.md) | アロケータオブジェクトを取得する | |
5253
5354
@@ -92,11 +93,14 @@ namespace std {
9293
| [`clear`](deque/clear.md) | 全ての要素を削除する | |
9394
| [`insert`](deque/insert.md) | 任意の位置に要素を挿入する | |
9495
| [`emplace`](deque/emplace.md) | 任意の位置に要素を直接構築で挿入する | C++11 |
96+
| [`insert_range`](deque/insert_range.md) | 任意の位置にRangeの要素を挿入する | C++23 |
9597
| [`push_back`](deque/push_back.md) | 末尾に要素を追加する | |
9698
| [`emplace_back`](deque/emplace_back.md) | 末尾に要素を直接構築で追加する | C++11 |
99+
| [`append_range`](deque/append_range.md) | 末尾にRangeの要素を追加する | C++23 |
97100
| [`pop_back`](deque/pop_back.md) | 末尾要素を削除する | |
98101
| [`push_front`](deque/push_front.md) | 先頭に要素を追加する | |
99102
| [`emplace_front`](deque/emplace_front.md) | 先頭に要素を直接構築で追加する | C++11 |
103+
| [`prepend_range`](deque/prepend_range.md) | 先頭にRangeの要素を追加する | C++23 |
100104
| [`pop_front`](deque/pop_front.md) | 先頭要素を削除する | |
101105
| [`resize`](deque/resize.md) | 要素数を変更する | |
102106
| [`erase`](deque/erase.md) | 指定した要素を削除する | |
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# append_range
2+
* deque[meta header]
3+
* std[meta namespace]
4+
* deque[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)`から`deque`コンテナへの`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 <deque>
36+
#include <iostream>
37+
38+
int main()
39+
{
40+
std::deque<int> d = {1, 2, 3};
41+
const int a[3] = {4, 5, 6};
42+
43+
// Rangeを末尾に追加
44+
d.append_range(a);
45+
46+
for (int i : d) {
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+
* deque[meta header]
3+
* std[meta namespace]
4+
* deque[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)`から`deque`コンテナへの`EmplaceConstructible`であること。
23+
24+
25+
## 効果
26+
Range`rg`の各要素を、再代入する。
27+
28+
29+
## 戻り値
30+
なし
31+
32+
33+
## 例
34+
```cpp example
35+
#include <deque>
36+
#include <iostream>
37+
38+
int main()
39+
{
40+
std::deque<int> d = {1, 2, 3};
41+
const int a[3] = {4, 5, 6};
42+
43+
// Rangeを再代入
44+
d.assign_range(a);
45+
46+
for (int i : d) {
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+
* deque[meta header]
3+
* std[meta namespace]
4+
* deque[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)`から`deque`コンテナへの`EmplaceConstructible`であり、かつ型`T`が`MoveConstructible`・`MoveAssignable`・`Swappable`であること。
19+
20+
21+
## 効果
22+
Range`rg`の各要素を、`pos`の直前に挿入する。
23+
24+
25+
## 戻り値
26+
挿入されたRange`rg`の最初の要素を指すイテレータ。`rg`が空の場合は`pos`。
27+
28+
29+
## 例
30+
```cpp example
31+
#include <deque>
32+
#include <iostream>
33+
#include <iterator>
34+
35+
int main()
36+
{
37+
std::deque<int> d = {1, 2, 3};
38+
const int a[3] = {4, 5, 6};
39+
40+
// Rangeを1番目と2番目の要素の間に挿入
41+
d.insert_range(std::next(d.begin()), a);
42+
43+
for (int i : d) {
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+
* deque[meta header]
3+
* std[meta namespace]
4+
* deque[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)`から`deque`コンテナへの`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 <deque>
36+
#include <iostream>
37+
38+
int main()
39+
{
40+
std::deque<int> d = {1, 2, 3};
41+
const int a[3] = {4, 5, 6};
42+
43+
// Rangeを先頭に追加
44+
d.prepend_range(a);
45+
46+
for (int i : d) {
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)