std::vector
是 C++ 标准库中最常用的动态数组容器,提供了丰富的操作方法,支持动态扩展、插入、删除等操作。本文将详细介绍 vector
的常用函数及其用法,并配合代码示例说明。
1. std::vector
的基本使用
在 C++ 中,vector
需要包含头文件:
#include <vector>
示例:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
输出:
1 2 3 4 5
2. vector
的构造与初始化
2.1 默认构造
std::vector<int> vec; // 空 vector
2.2 指定大小的构造
std::vector<int> vec(5); // 生成5个默认值0的元素
2.3 指定大小和默认值
std::vector<int> vec(5, 10); // 生成5个值为10的元素
2.4 使用初始化列表
std::vector<int> vec = {1, 2, 3, 4, 5};
2.5 使用迭代器区间
std::vector<int> vec1 = {1, 2, 3, 4, 5};
std::vector<int> vec2(vec1.begin(), vec1.begin() + 3); // {1, 2, 3}
3. vector
的访问函数
示例:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {10, 20, 30, 40, 50};
std::cout << "Element at index 2: " << vec[2] << std::endl;
std::cout << "Element at index 3 (using at()): " << vec.at(3) << std::endl;
std::cout << "First element: " << vec.front() << std::endl;
std::cout << "Last element: " << vec.back() << std::endl;
return 0;
}
输出:
Element at index 2: 30
Element at index 3 (using at()): 40
First element: 10
Last element: 50
注意:at()
进行范围检查,如果索引越界会抛出 std::out_of_range
异常,而 operator[]
不会 进行检查,可能导致未定义行为。
4. vector
的修改函数
4.1 添加元素
4.1 添加元素
std::vector<int> vec;
vec.push_back(10);
vec.push_back(20);
vec.push_back(30); // {10, 20, 30}
4.2 删除元素
vec.pop_back(); // {10, 20}
4.3 插入元素
vec.insert(vec.begin() + 1, 15); // {10, 15, 20}
4.4 删除指定位置的元素
vec.erase(vec.begin() + 1); // {10, 20}
4.5 清空 vector
vec.clear(); // 变为空 {}
4.6 改变 vector
的大小
vec.resize(5, 100); // {100, 100, 100, 100, 100}
5. vector
的容量函数
示例
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
std::cout << "Initial size: " << vec.size() << ", capacity: " << vec.capacity() << std::endl;
vec.reserve(100);
std::cout << "After reserve(100): capacity = " << vec.capacity() << std::endl;
vec.shrink_to_fit();
std::cout << "After shrink_to_fit(): capacity = " << vec.capacity() << std::endl;
return 0;
}
输出示例:
Initial size: 0, capacity: 0
After reserve(100): capacity = 100
After shrink_to_fit(): capacity = 0
6. vector
的排序和查找
6.1 排序
#include <algorithm>
std::vector<int> vec = {5, 3, 8, 1};
std::sort(vec.begin(), vec.end()); // {1, 3, 5, 8}
6.2 反向排序
std::sort(vec.rbegin(), vec.rend()); // {8, 5, 3, 1}
6.3 查找元素
auto it = std::find(vec.begin(), vec.end(), 3);
if (it != vec.end()) {
std::cout << "Found at index: " << std::distance(vec.begin(), it);
}
7. vector
与指针的关系
vector
底层存储数据为 连续内存,可以通过 data()
获取指向其首元素的指针:
int* ptr = vec.data();
可以用于 C 风格 API:
void processArray(int* arr, int size) { /* 处理数组 */ }
processArray(vec.data(), vec.size());
总结
✅ vector
适用于:
- 需要动态数组的场景。
- 频繁访问元素时(O(1) 访问)。
- 需要方便地插入/删除末尾元素(O(1) 操作)。
❌ vector
不适用于:
- 需要高效地在中间插入/删除元素(可使用
std::list
)。 - 需要固定大小的数组(可使用
std::array
)。