《C++ Primer 第五版》vector初始化方式

在 C++ 中,std::vector 是一个非常强大且灵活的动态数组容器,它的初始化方式有很多种,适应不同的使用场景。下面我们以图解 + 实例 + 分析的方式详细讲解。


 分类总览:vector 的几种初始化方式

初始化方式说明示例
默认构造创建空 vectorstd::vector<int> v1;
指定大小构造创建指定数量元素,默认值初始化std::vector<int> v2(5);
指定大小+初始值构造创建并用指定值填充元素std::vector<int> v3(5, 42);
列表初始化(C++11)使用{}列表初始化 vector 内容std::vector<int> v4{1, 2, 3};
拷贝构造用另一个 vector 复制构造std::vector<int> v5(v3);
迭代器范围构造从一个范围(如数组)中构造 vectorstd::vector<int> v6(arr, arr+5);
使用 assign()后期指定元素内容v7.assign(3, 10);
从数组构造用 C 风格数组构造std::vector<int> v8(a, a+N);
使用 emplace_back()一个一个动态添加元素(构造就地)v.emplace_back(42);

 图示理解

std::vector<int> v(4, 100);

+-----+-----+-----+-----+
| 100 | 100 | 100 | 100 |
+-----+-----+-----+-----+

你创建了一个大小为 4 的 vector,每个元素值为 100。


各种方式的详细讲解 + 示例

1️⃣ 默认构造

std::vector<int> v1;

📌 创建一个空 vector,容量为 0,通常用于后续添加元素。


2️⃣ 指定大小(元素值默认)

std::vector<int> v2(5);

📌 创建一个长度为 5 的 vector,默认值为 0(对内置类型如 int)。

输出:

0 0 0 0 0


3️⃣ 指定大小 + 初始值

std::vector<int> v3(5, 42);

📌 创建 5 个元素,每个值为 42。

输出:

42 42 42 42 42


4️⃣ 列表初始化(推荐,C++11 起)

std::vector<int> v4{1, 2, 3};

📌 直接用一组值初始化,更直观。


5️⃣ 拷贝构造

std::vector<int> v5(v4);

📌 完整复制另一个 vector 的内容。


6️⃣ 迭代器范围构造

int arr[] = {10, 20, 30, 40};
std::vector<int> v6(arr, arr + 4);

📌 从数组的一部分构造 vector,灵活又实用。


7️⃣ 使用 assign() 方法

std::vector<int> v7;
v7.assign(3, 9);  // 3 个 9

📌 适合在已创建 vector 后,批量设置内容。


8️⃣ emplace_back() / push_back()

std::vector<std::string> v;
v.emplace_back("hello");
v.emplace_back(5, 'a'); // 添加 "aaaaa"

📌 emplace_back() 直接构造对象,比 push_back() 更高效。


 特殊案例:二维 vector 初始化

std::vector<std::vector<int>> matrix(3, std::vector<int>(4, 0));

📌 创建 3x4 的二维数组,初始值全为 0。


✅ 总结思维导图

vector 初始化方式
├── 默认构造
├── 固定大小:v(n)
├── 大小+初值:v(n, val)
├── 列表初始化:{1,2,3}
├── 拷贝构造
├── 范围构造:[beg, end]
├── assign方法
└── 动态添加元素:push_back / emplace_back

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dlz0836

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值