在C++标准模板库(STL)中,vector
是一个非常常用的序列容器。它提供了动态数组的功能,可以自动管理内存,支持高效的随机访问。本文将详细介绍 vector
类的使用与理解,分为上下两篇。本文为上篇,将覆盖 vector
的基本特性及常用操作。
一、vector
的基本特性
- 动态大小:
vector
可以根据需要自动扩展或收缩大小。 - 随机访问:支持通过下标快速访问元素,时间复杂度为 O(1)。
- 内存管理:
vector
自动处理内存的分配与释放,避免了手动管理的复杂性。
二、引入头文件
使用 vector
之前,需要包含头文件:
#include <vector>
三、基本操作
1. 创建 vector
可以通过以下几种方式创建 vector
:
std::vector<int> v1; // 空的 vector
std::vector<int> v2(5); // 包含 5 个默认初始化的元素
std::vector<int> v3(5, 10); // 包含 5 个值为 10 的元素
std::vector<int> v4 = {1, 2, 3, 4, 5}; // 使用初始化列表
2. 添加元素
vector
提供了多种方法添加元素:
v1.push_back(10); // 在末尾添加元素
v1.push_back(20);
v1.emplace_back(30); // 直接构造对象,性能更优
3. 访问元素
可以通过下标或迭代器访问元素:
int first = v1[0]; // 使用下标访问
int second = v1.at(1); // 使用 at() 方法访问,提供边界检查
for (auto it = v1.begin(); it != v1.end(); ++it) {
std::cout << *it << " "; // 使用迭代器遍历
}
4. 修改元素
可以通过下标或迭代器修改元素:
v1[0] = 100; // 使用下标修改
v1.at(1) = 200; // 使用 at() 方法修改
for (auto it = v1.begin(); it != v1.end(); ++it) {
*it += 10; // 使用迭代器修改
}
5. 删除元素
可以使用 pop_back()
删除最后一个元素,或使用 erase()
删除指定位置的元素:
v1.pop_back(); // 删除最后一个元素
v1.erase(v1.begin()); // 删除第一个元素
6. 大小和容量
vector
提供了方法来获取当前大小和容量:
std::cout << "Size: " << v1.size() << std::endl; // 当前元素个数
std::cout << "Capacity: " << v1.capacity() << std::endl; // 当前容量
7. 清空和释放内存
可以使用 clear()
清空 vector
中的元素:
v1.clear(); // 清空所有元素
四、示例代码
以下是一个简单的示例,展示了 vector
的基本使用:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 添加元素
numbers.push_back(6);
numbers.emplace_back(7);
// 访问元素
std::cout << "Numbers: ";
for (auto num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// 修改元素
numbers[2] = 10;
// 删除元素
numbers.pop_back();
// 输出结果
std::cout << "Updated Numbers: ";
for (auto num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
五、总结
vector
是C++ STL中功能强大且灵活的容器,支持动态数组的特性,使得开发者可以方便地处理一组数据。在本篇中,我们探讨了 vector
的基本特性、常用操作以及示例代码。在下篇中,我们将深入讨论 vector
的高级特性及应用场景。
希望本文能帮助你更好地理解 vector
类的使用与理解!如有疑问,欢迎讨论!