C++ vector 容器详解
vector 是 C++ 标准库(STL)中最常用的 动态数组 容器,提供了自动扩展、随机访问、高效插入删除等功能。它是 std::vector<T> 的形式,存储 T 类型的元素。
1. vector 基本概念
- 动态扩展:
vector会根据需要自动扩展或收缩。 - 连续存储:底层数据存储在 连续的内存块 中,支持高效的随机访问。
- 支持插入/删除:提供
push_back()、pop_back()等方法来动态操作数据。
2. 引入 vector 头文件
vector 位于 <vector> 头文件中:
#include <vector>
3. vector 的基本用法
3.1 定义与初始化
#include <iostream>
#include <vector>
int main() {
// 定义 vector
std::vector<int> v1; // 空 vector
std::vector<int> v2(5, 10); // 5 个 10
std::vector<int> v3 = {1, 2, 3, 4, 5}; // 列表初始化
std::vector<int> v4(v3); // 拷贝 v3
std::vector<int> v5(v3.begin(), v3.begin() + 3); // 取 v3 的前 3 个元素
return 0;
}
3.2 向 vector 添加和删除元素
#include <iostream>
#include <vector>
int main() {
std::vector<int> v;
// 添加元素
v.push_back(10);
v.push_back(20);
v.push_back(30);
// 删除元素
v.pop_back(); // 删除最后一个元素
std::cout << "Vector 元素: ";
for (int num : v) {
std::cout << num << " ";
}
return 0;
}
输出:
Vector 元素: 10 20
3.3 访问 vector 元素
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
// 使用索引访问
std::cout << "v[0]: " << v[0] << std::endl;
// 使用 `at()`
std::cout << "v.at(1): " << v.at(1) << std::endl;
// 访问首尾元素
std::cout << "首元素: " << v.front() << std::endl;
std::cout << "尾元素: " << v.back() << std::endl;
return 0;
}
输出:
v[0]: 1
v.at(1): 2
首元素: 1
尾元素: 5
注意:
at()比[]更安全,因为at()会检查越界错误,而[]不会。
4. 遍历 vector
4.1 使用 for 循环
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
for (size_t i = 0; i < v.size(); i++) {
std::cout << v[i] << " ";
}
return 0;
}
4.2 使用 range-based for
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {10, 20, 30};
for (int num : v) {
std::cout << num << " ";
}
return 0;
}
4.3 使用 iterator 迭代器
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {100, 200, 300};
for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++) {
std::cout << *it << " ";
}
return 0;
}
5. 插入和删除元素
5.1 插入元素
vector 支持在任意位置插入元素:
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3};
v.insert(v.begin(), 0); // 在开头插入 0
v.insert(v.end(), 4); // 在结尾插入 4
std::cout << "Vector: ";
for (int num : v) {
std::cout << num << " ";
}
return 0;
}
输出:
Vector: 0 1 2 3 4
5.2 删除元素
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {10, 20, 30, 40, 50};
v.erase(v.begin() + 1); // 删除第 2 个元素
v.erase(v.begin(), v.begin() + 2); // 删除前两个元素
std::cout << "Vector: ";
for (int num : v) {
std::cout << num << " ";
}
return 0;
}
输出:
Vector: 40 50
6. vector 容量和大小
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4};
std::cout << "大小: " << v.size() << std::endl;
std::cout << "容量: " << v.capacity() << std::endl;
v.reserve(10); // 预留空间
std::cout << "新容量: " << v.capacity() << std::endl;
return 0;
}
capacity()返回当前分配的存储空间,size()返回当前元素数量。
7. vector 排序
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {5, 3, 1, 4, 2};
std::sort(v.begin(), v.end()); // 升序排序
std::cout << "排序后: ";
for (int num : v) {
std::cout << num << " ";
}
return 0;
}
输出:
排序后: 1 2 3 4 5
8. vector 其他操作
| 方法 | 作用 |
|---|---|
clear() | 清空所有元素 |
empty() | 判断 vector 是否为空 |
swap(v1, v2) | 交换两个 vector |
resize(n) | 改变 vector 大小 |
9. 总结
vector是 动态数组,支持随机访问和动态扩展。push_back()添加元素,pop_back()删除最后一个元素。insert()插入,erase()删除。size()获取大小,capacity()获取容量。sort()排序,clear()清空。
更多详细内容请关注其他相关文章!