std::deque<T,Allocator>:: resize
From cppreference.net
|
void
resize
(
size_type count
)
;
|
(1) | (自 C++26 起为 constexpr) |
|
void
resize
(
size_type count,
const
value_type
&
value
)
;
|
(2) | (自 C++26 起为 constexpr) |
将容器大小调整为包含 count 个元素:
- 若 count 等于当前尺寸,则不执行任何操作。
- 若当前尺寸大于 count ,容器将缩减至其前 count 个元素。
- 若当前尺寸小于 count ,则:
2)
额外的
value
副本被追加。
目录 |
参数
| count | - | 容器的新大小 | ||
| value | - | 用于初始化新元素的值 | ||
| 类型要求 | ||||
-
|
||||
复杂度
与当前大小和 count 之间的差值呈线性关系。
注释
如果在重载
(
1
)
中的值初始化不可取,例如当元素为非类类型且不需要清零时,可以通过提供
自定义的
Allocator::construct
来避免这种情况。
示例
运行此代码
#include <deque> #include <iostream> void print(auto rem, const std::deque<int>& c) { for (std::cout << rem; const int el : c) std::cout << el << ' '; std::cout << '\n'; } int main() { std::deque<int> c = {1, 2, 3}; print("双端队列包含: ", c); c.resize(5); print("扩容至5后: ", c); c.resize(2); print("缩容至2后: ", c); c.resize(6, 4); print("扩容至6后(初始化值 = 4): ", c); }
输出:
双端队列包含: 1 2 3 扩容至5后: 1 2 3 0 0 缩容至2后: 1 2 扩容至6后(初始化值 = 4): 1 2 4 4 4 4
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用标准 | 发布行为 | 正确行为 |
|---|---|---|---|
| LWG 679 | C++98 |
resize()
按值传递
value
|
按常量引用传递 |
| LWG 1418 | C++98 | 未指定 resize ( size ( ) ) 的行为 | 已指定 |
| LWG 2033 | C++11 |
1. 使用
erase()
[1]
移除元素
2. 未要求
T
满足
MoveInsertable
|
1. 使用
pop_back()
2. 已要求 |
| LWG 2066 | C++11 |
重载
(
1
)
不具备重载
(
2
)
的异常安全保证 |
已添加 |
| LWG 2160 | C++11 |
因 LWG 2033 的解决方案
而使用 pop_back() [2] 移除元素 |
未指定元素移除方式 |
-
↑
erase()
可以移除
deque中间的元素,因此要求值类型满足 MoveAssignable 要求,以便被移除段之后的元素可以向前移动填补空缺。但resize()只能移除deque末端的元素,这使得 MoveAssignable 要求变得不必要。 - ↑ 通过使用 pop_back() 移除元素意味着需要从后向前依次移除元素。
参见
|
返回可容纳的最大元素数
(公开成员函数) |
|
|
返回元素数量
(公开成员函数) |
|
|
检查容器是否为空
(公开成员函数) |