C++之vector 初始化指定大小容量

本文详细介绍了在C++中如何使用vector进行一维和二维数组的初始化,包括使用不同构造函数实现的具体方法。探讨了vector<int>obj(size)与vector<int>obj(size,0)两种初始化方式的区别及其底层构造函数的调用过程。

1. 一维

vector<int> obj(size);
或
vector<int> obj;
obj.resize(size);

2. 二维

 vector<vector<int> > obj(rsize, vector<int>(lsize, 0));
或
vector<vector<int>> obj;
obj.resize(rsize);

for(int i = 0; i < rsize; i++)
    obj[i].resize(lsize);

.当调用vector<int> obj(size)时,调用构造函数 :

    
explicit vector(_CRT_GUARDOVERFLOW const size_type _Count, const _Alloc& _Al = _Alloc())
        : _Mypair(_One_then_variadic_args_t(), _Al) { // construct from _Count * _Ty(), optional allocator
        _Construct_n_copies_of_ty(_Count, _Value_init_tag{});
    }

.当调用vector<int> obj(size, 0)的时候,调用构造函数:

    vector(_CRT_GUARDOVERFLOW const size_type _Count, const _Ty& _Val, const _Alloc& _Al = _Alloc())
        : _Mypair(_One_then_variadic_args_t(), _Al) { // construct from _Count * _Val, optional allocator
        _Construct_n_copies_of_ty(_Count, _Val);

 

C++ 中,`std::vector` 是一个动态数组,它可以根据需要自动扩容。但在某些场景下,为了提高性能(比如已知元素个数),我们希望在初始化时就指定 `vector` 的 **容量(capacity)** 或 **大小(size)**。 --- ### ✅ 1. 初始化指定 **容量(capacity)** `vector` 的 **容量(capacity)** 是指它在重新分配内存之前能容纳的元素数量。我们可以使用 `reserve()` 来设置容量,但不会改变 `size()`。 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec; vec.reserve(100); // 预分配内存,容量为100 std::cout << "Size: " << vec.size() << std::endl; // 输出 0 std::cout << "Capacity: " << vec.capacity() << std::endl; // 输出 100 return 0; } ``` > ⚠️ 注意:`reserve()` 只影响容量,不会构造实际的元素,`size()` 仍为 0。 --- ### ✅ 2. 初始化指定 **大小(size)** 如果你希望 `vector` 初始化就包含指定数量的元素,可以使用构造函数或 `resize()`: #### 方法一:使用构造函数初始化大小和默认值 ```cpp std::vector<int> vec(10); // 初始化大小为10,每个元素为 int()(即0) ``` ```cpp std::vector<int> vec(10, 42); // 初始化大小为10,每个元素为42 ``` #### 方法二:使用 `resize()` ```cpp std::vector<int> vec; vec.resize(10); // 调整大小为10,新元素初始化为0 ``` --- ### ✅ 3. 初始化指定大小容量 你可以结合 `reserve()` 和构造函数来同时指定大小容量: ```cpp std::vector<int> vec; vec.reserve(100); // 容量为100 vec.resize(10); // 实际大小为10 ``` 此时: - `size() == 10` - `capacity() >= 100`(取决于内存分配策略) --- ### ✅ 4. 使用初始化列表(C++11 起) ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; // 初始化列表 ``` --- ### 📌 总结对比 | 初始化方式 | 是否改变 size | 是否改变 capacity | 是否构造元素 | |------------------|----------------|---------------------|----------------| | `reserve(n)` | ❌ | ✅ | ❌ | | `vector(n)` | ✅ | ✅(通常等于 n) | ✅ | | `vector(n, val)` | ✅ | ✅(通常等于 n) | ✅ | | `resize(n)` | ✅ | ❌(可能触发扩容) | ✅ | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值