在 C++ 中,std::vector
是一个非常强大且灵活的动态数组容器,它的初始化方式有很多种,适应不同的使用场景。下面我们以图解 + 实例 + 分析的方式详细讲解。
分类总览:vector
的几种初始化方式
初始化方式 | 说明 | 示例 |
---|---|---|
默认构造 | 创建空 vector | std::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); |
迭代器范围构造 | 从一个范围(如数组)中构造 vector | std::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