C++ vector resize默认值及填充值初始化方法
resize()不传第二个参数时用元素类型的默认构造值填充:内置类型为0或0.0,类类型调用默认构造函数。
resize() 不传第二个参数时用元素类型的默认构造值填充:内置类型为0或0.0,类类型调用默认构造函数。

resize() 不传第二个参数时用什么值填充
vector::resize() 调用时不传第二个参数,会默认使用元素类型的默认构造值:对内置类型(如 int、double)是零初始化(0、0.0),对类类型是调用其默认构造函数。
注意这不是“未定义值”或“栈上随机值”——C++ 标准明确要求默认初始化(default-initialization),而内置类型在 default-initialization 下若为局部变量则值不确定,但 resize() 内部实际执行的是 value-initialization(等价于 T()),所以结果总是确定的零值或默认构造对象。
vector→v; v.resize(3); v变成{0, 0, 0}vector→ 两个空字符串v; v.resize(2); { "", "" }vector→> v; v.resize(1); { {0, 0} }(pair的默认构造会 value-initialize 成员)
resize() 第二个参数指定填充值的用法
直接传入一个值作为第二参数,所有新增元素都会被拷贝构造(或移动构造)该值:
vectorv = {1, 2}; v.resize(5, 99); // → {1, 2, 99, 99, 99}
这个值必须能隐式转换为 vector 元素类型,且参与的是拷贝/移动构造,不是赋值。因此对不可拷贝类型(如 unique_ptr)需确保传入的是可移动的右值。
- 支持自定义类型:
MyClass x; v.resize(3, x);要求MyClass有可访问的拷贝构造函数 - 避免临时对象生命周期问题:
v.resize(3, MyClass{42});安全,因为MyClass{42}是纯右值,会被移动构造(C++11 起) - 不推荐用指针或引用类型做填充值,容易引发悬空或意外共享
assign() 和 resize() 填充行为的区别
assign() 是完全替换内容,而 resize() 只影响 size,不改变已有元素;但两者都支持指定填充值,语义不同:
v.assign(4, 7);→ 无论原v是什么,变成{7,7,7,7}v.resize(4, 7);→ 若原v有 5 个元素,只截断到 4,不填充;若原 size=2,则后两个填7
也就是说,assign() 更接近“重置并填充”,resize() 是“伸缩并按需填充”。当需要确保容器长度且统一初始化新位置时,resize(n, val) 更精准;若想彻底清空再填,assign() 或先 clear() 再 resize() 都可以,但后者多一次析构+构造开销。
初始化 vector 时就指定大小和填充值的写法
构造时直接指定大小和填充值,比先默认构造再 resize() 更高效(避免默认构造 + 后续赋值/构造):
vectorv(5, 42); // {42,42,42,42,42} vector w(3, "hi"); // {"hi","hi","hi"}
这调用的是 vector(size_type n, const T& value) 构造函数,内部直接批量构造,不经过默认构造再填充的过程。对于大容量或非 trivial 类型(如含资源管理的类),性能差异明显。
注意:不能写成 vector——这是 initializer_list 构造,结果是 {5, 42},不是 5 个 42。
真正容易被忽略的是:resize() 的填充值参数是 const T&,对 move-only 类型(如 unique_ptr)必须显式用 std::move 传入右值,否则编译失败;而构造函数版本同样适用这一规则。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













