deduction guides for
std::queue
|
定义于头文件
<queue>
|
||
|
template
<
class
Container
>
queue
(
Container
)
|
(1) | (C++17 起) |
|
template
<
class
Container,
class
Alloc
>
queue
(
Container, Alloc
)
|
(2) | (C++17 起) |
|
template
<
class
InputIt
>
queue
(
InputIt, InputIt
)
|
(3) | (C++23 起) |
|
template
<
class
InputIt,
class
Alloc
>
queue
(
InputIt, InputIt, Alloc
)
|
(4) | (C++23 起) |
|
template
<
ranges::
input_range
R
>
queue
(
std::
from_range_t
, R
&&
)
|
(5) | (C++23 起) |
|
template
<
ranges::
input_range
R,
class
Allocator
>
queue
(
std::
from_range_t
, R
&&
, Allocator
)
|
(6) | (C++23 起) |
这些
推导指引
为
queue
提供,允许从底层容器类型进行推导。
这些重载仅在以下情况下参与重载决议:
-
若存在
InputIt,则需满足 LegacyInputIterator 要求, -
若存在
Container,则不满足 Allocator 要求, -
对于
(3)
(until C++23)
(4)
(since C++23)
,
Alloc需满足 Allocator 要求,且 -
若
Container与Alloc同时存在,则 std:: uses_allocator_v < Container, Alloc > 需为 true 。
注意:库判定某个类型不满足
LegacyInputIterator
要求的程度是未指定的,但至少整型类型不符合输入迭代器的条件。同样地,库判定某个类型不满足
Allocator
要求的程度也是未指定的,但至少要求成员类型
Alloc::value_type
必须存在,且表达式
std::
declval
<
Alloc
&
>
(
)
.
allocate
(
std::
size_t
{
}
)
在被视为未求值操作数时必须具有良好形式。
注释
| 功能测试 宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_adaptor_iterator_pair_constructor
|
202106L
|
(C++23) | std::queue 和 std::stack 的迭代器对构造函数;重载 (2) 和 (4) |
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | 范围感知 的构造与插入操作;重载 (5) 和 (6) |
示例
#include <queue> #include <vector> int main() { std::vector<int> v = {1, 2, 3, 4}; std::queue s{v}; // 推导指南 #1 推导出 std::queue<int, vector<int>> }