目录
- vector 概述
- vector 的声明与初始化
- 常用成员函数
- vector 的迭代器
- 动态内存管理与性能
- 示例代码
- 参考资料
1. vector 概述
std::vector
是 C++ 标准模板库(STL)中的一个动态数组容器。它能自动管理内存,当元素个数发生变化时会自动调整大小,并提供随机访问、插入、删除等丰富功能。由于其灵活性和高效性,vector
常被用于需要动态存储数据的场景。
2. vector 的声明与初始化
在使用 std::vector
前,需要包含头文件 <vector>
。其基本声明语法为:
#include <vector>
// 声明一个存储 int 类型元素的 vector
std::vector<int> vec;
初始化方式
- 默认构造:创建一个空的 vector。
std::vector<int> vec;
- 指定初始大小:创建一个包含指定数量元素的 vector,默认元素值为类型的默认值。
std::vector<int> vec(10); // 创建一个大小为 10 的 vector,元素值均为 0
- 指定初始大小和初始值:
std::vector<int> vec(10, 5); // 创建一个大小为 10 的 vector,每个元素初始值为 5
- 列表初始化(C++11 及以上):
std::vector<int> vec = {1, 2, 3, 4, 5};
3. 常用成员函数
std::vector
提供了许多成员函数,用于操作容器中的元素:
- size():返回当前元素个数。
vec.size();
- empty():检查容器是否为空。
vec.empty();
- push_back():在末尾添加一个元素。
vec.push_back(42);
- pop_back():删除末尾元素。
vec.pop_back();
- at():通过索引访问元素,并进行范围检查。
int value = vec.at(2);
- front() 和 back():分别访问第一个和最后一个元素。
int first = vec.front(); int last = vec.back();
- insert():在指定位置插入元素。
vec.insert(vec.begin() + 2, 100);
- erase():删除指定位置的元素。
vec.erase(vec.begin() + 2);
- clear():清空所有元素。
vec.clear();
- resize():调整 vector 的大小,多出的部分会被默认构造,新减少的元素会丢失。
vec.resize(15);
4. vector 的迭代器
迭代器是访问 vector 内部元素的通用方式,它类似于指针,可以用于遍历容器。常用迭代器包括:
- begin():返回指向第一个元素的迭代器。
- end():返回指向容器尾后位置的迭代器。
- rbegin() 和 rend():返回反向迭代器,用于从后向前遍历。
示例:
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 使用迭代器遍历 vector
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
5. 动态内存管理与性能
- 自动管理内存:
vector
自动处理内存分配和释放,使用时无需担心内存泄漏问题。 - 容量和大小:除了元素个数(size),vector 还管理一个容量(capacity),即在无需重新分配内存的情况下可以容纳的最大元素数。使用
reserve()
可以预分配内存,提高插入效率。vec.reserve(100);
- 性能优化:频繁的插入和删除操作会引起内存重新分配,尽量预估好所需大小,减少 realloc 的次数,提升性能。
6. 示例代码
下面是一个综合示例,展示如何使用 std::vector
完成基本操作:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// 使用列表初始化 vector
vector<int> numbers = {5, 3, 8, 1, 9};
// 输出原始 vector
cout << "原始 vector: ";
for (int n : numbers) {
cout << n << " ";
}
cout << endl;
// 排序 vector
sort(numbers.begin(), numbers.end());
cout << "排序后 vector: ";
for (int n : numbers) {
cout << n << " ";
}
cout << endl;
// 添加新元素
numbers.push_back(7);
cout << "添加元素后 vector: ";
for (int n : numbers) {
cout << n << " ";
}
cout << endl;
// 删除第一个元素
numbers.erase(numbers.begin());
cout << "删除第一个元素后 vector: ";
for (int n : numbers) {
cout << n << " ";
}
cout << endl;
// 清空 vector
numbers.clear();
cout << "清空后 vector 大小: " << numbers.size() << endl;
return 0;
}
输出可能为:
原始 vector: 5 3 8 1 9
排序后 vector: 1 3 5 8 9
添加元素后 vector: 1 3 5 8 9 7
删除第一个元素后 vector: 3 5 8 9 7
清空后 vector 大小: 0
7. 参考资料
总结
std::vector
是 C++ 中非常常用且功能强大的动态数组容器,提供了自动内存管理、随机访问以及丰富的操作函数。通过了解 vector 的声明、初始化、常用操作和迭代器使用,可以高效地管理动态数据集合。合理使用预分配内存等技术,还能有效提升程序性能。
发表回复