vector
是 C++ 标准库中的一种序列容器,它提供了动态大小的数组功能。与传统的数组不同,vector
可以在运行时自动调整大小。vector
元素在内存中是连续存储的,因此它支持高效的随机访问。常用于存储需要频繁插入、删除元素的动态数据。
主要特点:
- 动态大小:
vector
会根据需要自动扩展容量。 - 随机访问:支持按索引直接访问元素,时间复杂度为 O(1)。
- 连续存储:
vector
的元素在内存中是连续存储的,这使得它们的访问比链表等数据结构更高效。 - 内存管理:
vector
会自动管理内存,但可以通过reserve()
函数提前申请内存,避免多次扩容。
基本操作
-
创建和初始化
vector
- 创建空
vector
。 - 使用初始化列表、指定大小和元素初始化等方式创建
vector
。
- 创建空
-
访问和修改元素
- 通过下标 (
[]
) 或at()
方法访问元素。 - 通过
[]
操作符直接修改元素。 at()
方法可以检查越界访问,并抛出异常。
- 通过下标 (
-
添加和删除元素
push_back(x)
:向vector
末尾添加元素。pop_back()
:删除vector
中的最后一个元素。
-
获取
vector
的大小和容量size()
:返回vector
中元素的个数。capacity()
:返回vector
分配的内存容量。
-
遍历
vector
- 使用传统的
for
循环、范围for
循环或迭代器遍历vector
。
- 使用传统的
-
修改
vector
容量reserve(n)
:为vector
预留n
个元素的空间,避免频繁扩容。resize(n)
:调整vector
的大小,若n
小于当前大小,元素会被删除。
示例
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 创建 vector
vector<int> v1; // 空的 vector
vector<int> v2(5, 10); // 5个元素,每个元素初始化为 10
vector<int> v3 = {1, 2, 3, 4, 5}; // 使用初始化列表
// 访问元素
cout << "v3[0]: " << v3[0] << endl;
cout << "v3.at(2): " << v3.at(2) << endl;
// 添加元素
v3.push_back(6); // 添加元素到末尾
cout << "v3 after push_back: ";
for (auto x : v3) cout << x << " ";
cout << endl;
// 删除元素
v3.pop_back(); // 删除最后一个元素
cout << "v3 after pop_back: ";
for (auto x : v3) cout << x << " ";
cout << endl;
// 获取大小和容量
cout << "v3.size(): " << v3.size() << endl; // 元素个数
cout << "v3.capacity(): " << v3.capacity() << endl; // 内存容量
// 遍历 vector
cout << "Using range-based for loop: ";
for (auto val : v3) {
cout << val << " ";
}
cout << endl;
// 使用迭代器遍历
cout << "Using iterator: ";
for (auto it = v3.begin(); it != v3.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// 修改 vector 容量
v3.reserve(20); // 预留 20 个元素的空间
cout << "v3.capacity() after reserve(20): " << v3.capacity() << endl;
return 0;
}
输出
v3[0]: 1
v3.at(2): 3
v3 after push_back: 1 2 3 4 5 6
v3 after pop_back: 1 2 3 4 5
v3.size(): 5
v3.capacity(): 7
Using range-based for loop: 1 2 3 4 5
Using iterator: 1 2 3 4 5
v3.capacity() after reserve(20): 20
总结
- 创建和初始化:可以通过空构造函数、指定大小、初始化列表等方式创建
vector
。 - 元素操作:
- 使用
push_back()
添加元素; - 使用
pop_back()
删除元素; - 使用
[]
和at()
访问或修改元素。
- 使用
- 容器管理:
- 使用
size()
和capacity()
获取当前元素数量和内存容量; - 使用
reserve()
和resize()
控制内存管理,避免不必要的扩容。
- 使用
- 遍历:
- 使用传统
for
循环、范围for
循环或迭代器遍历vector
。
- 使用传统
vector
是 C++ 中非常常用且强大的容器,它提供了灵活的数据存储方式和高效的随机访问功能。掌握 vector
的使用是 C++ 编程的基础,对于处理动态数据集特别有帮助。