Skip to content

Commit 4739327

Browse files
committed
add push_range to std::queue and std::priority_queue (#1069)
1 parent b067a8b commit 4739327

File tree

4 files changed

+130
-0
lines changed

4 files changed

+130
-0
lines changed

reference/queue/priority_queue.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ namespace std {
4949
| [`size`](priority_queue/size.md) | 要素数を取得する | |
5050
| [`top`](priority_queue/top.md) | 次の要素にアクセスする | |
5151
| [`push`](priority_queue/push.md) | 要素を追加する | |
52+
| [`push_range`](priority_queue/push_range.md) | Rangeの要素を追加する | C++23 |
5253
| [`emplace`](priority_queue/emplace.md) | 直接構築で要素を追加する | C++11 |
5354
| [`pop`](priority_queue/pop.md) | 次の要素を削除する | |
5455
| [`swap`](priority_queue/swap.md) | 他のpriority_queueオブジェクトと値を入れ替える | C++11 |
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# push_range
2+
* queue[meta header]
3+
* std[meta namespace]
4+
* priority_queue[meta class]
5+
* function template[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
template <container-compatible-range<value_type> R>
10+
void push_range(R&& rg); // C++23
11+
```
12+
13+
## 概要
14+
Range`rg` の各要素を `priority_queue` に追加し、優先順に並べ替えを行う。
15+
16+
17+
## 効果
18+
まず `c` に `rg` の要素を追加する。`c.append_range(forward<R>(rg))` が有効であれば、これで要素を追加する。そうでなければ、`ranges::copy(rg, back_inserter(c))` で要素を追加する。
19+
20+
次に、`make_heap(c.begin(), c.end(), comp)` で優先順に並べ替えを行う。
21+
22+
23+
## 戻り値
24+
なし
25+
26+
27+
## 例
28+
```cpp example
29+
#include <iostream>
30+
#include <queue>
31+
#include <vector>
32+
33+
int main()
34+
{
35+
std::priority_queue<int> que;
36+
std::vector<int> vec = {2, 1, 3};
37+
38+
que.push_range(vec);
39+
40+
while (!que.empty()) {
41+
std::cout << que.top() << std::endl;
42+
que.pop();
43+
}
44+
}
45+
```
46+
* push_range[color ff0000]
47+
* que.empty()[link empty.md]
48+
* que.top()[link top.md]
49+
* que.pop()[link pop.md]
50+
51+
### 出力
52+
```
53+
3
54+
2
55+
1
56+
```
57+
58+
59+
## 関連項目
60+
61+
| 名前 | 説明 |
62+
|-------------------|----------------|
63+
| [`push`](push.md) | 要素を追加する |

reference/queue/queue.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ namespace std {
4444
| [`front`](queue/front.md) | 次の要素にアクセスする | |
4545
| [`back`](queue/back.md) | 最後の要素にアクセスする | |
4646
| [`push`](queue/push.md) | 要素を追加する | |
47+
| [`push_range`](queue/push_range.md) | Rangeの要素を追加する | C++23 |
4748
| [`emplace`](queue/emplace.md) | 直接構築で要素を追加する | C++11 |
4849
| [`pop`](queue/pop.md) | 次の要素を削除する | |
4950
| [`swap`](queue/swap.md) | 他の`queue`オブジェクトと値を入れ替える | C++11 |
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# push_range
2+
* queue[meta header]
3+
* std[meta namespace]
4+
* queue[meta class]
5+
* function template[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
template <container-compatible-range<value_type> R>
10+
void push_range(R&& rg); // C++23
11+
```
12+
13+
## 概要
14+
Range`rg` の各要素を `queue` の末尾に追加する。
15+
16+
17+
## 効果
18+
`c.append_range(forward<R>(rg))` が有効であれば、これと同等。
19+
そうでなければ、`ranges::copy(rg, back_inserter(c))`。
20+
21+
22+
## 戻り値
23+
なし
24+
25+
26+
## 計算量
27+
`c.append_range(rg)`(または `ranges::copy(rg, back_inserter(c))`)と同じ。
28+
29+
30+
## 例
31+
```cpp example
32+
#include <iostream>
33+
#include <queue>
34+
#include <vector>
35+
36+
int main()
37+
{
38+
std::queue<int> que;
39+
std::vector<int> vec = {1, 2, 3};
40+
41+
que.push_range(vec);
42+
43+
while (!que.empty()) {
44+
std::cout << que.front() << std::endl;
45+
que.pop();
46+
}
47+
}
48+
```
49+
* push_range[color ff0000]
50+
* que.empty()[link empty.md]
51+
* que.front()[link front.md]
52+
* que.pop()[link pop.md]
53+
54+
### 出力
55+
```
56+
1
57+
2
58+
3
59+
```
60+
61+
## 関連項目
62+
63+
| 名前 | 説明 |
64+
|-------------------|----------------|
65+
| [`push`](push.md) | 要素を追加する |

0 commit comments

Comments
 (0)