C++的vector是标准模板库提供的动态数组容器,能够根据需要自动调整大小,支持随机访问,是日常开发中使用频率最高的容器之一。掌握它的常用方法能够大幅提升编码效率。

元素访问相关方法
vector提供了多种访问内部元素的方式,不同方法的适用场景有所区别。
operator[]
通过下标直接访问元素,不进行越界检查,访问效率最高。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4};
// 下标访问,不检查越界
std::cout << vec[0] << std::endl; // 输出1
std::cout << vec[3] << std::endl; // 输出4
return 0;
}
at()方法
通过下标访问元素,会进行越界检查,如果下标超出范围会抛出std::out_of_range异常,安全性更高。
#include <iostream>
#include <vector>
#include <stdexcept>
int main() {
std::vector<int> vec = {1, 2, 3};
try {
// 越界访问会抛出异常
std::cout << vec.at(5) << std::endl;
} catch (const std::out_of_range& e) {
std::cout << "越界错误: " << e.what() << std::endl;
}
return 0;
}
front()和back()
分别返回容器的第一个元素和最后一个元素的引用,调用前需要确保容器不为空。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {10, 20, 30};
std::cout << "第一个元素: " << vec.front() << std::endl; // 输出10
std::cout << "最后一个元素: " << vec.back() << std::endl; // 输出30
return 0;
}
data()方法
返回指向底层连续存储数组的指针,可用于和C风格接口交互。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3};
int* p = vec.data();
// 通过指针访问元素
std::cout << p[1] << std::endl; // 输出2
return 0;
}
容量相关方法
这类方法用于查询或调整vector的容量和大小。
size()和empty()
size()返回当前容器中元素的数量,empty()判断容器是否为空,返回布尔值。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec1;
std::vector<int> vec2 = {1, 2, 3};
std::cout << "vec1是否为空: " << vec1.empty() << std::endl; // 输出1(true)
std::cout << "vec2元素数量: " << vec2.size() << std::endl; // 输出3
return 0;
}
capacity()和reserve()
capacity()返回当前容器已分配的内存能容纳的元素数量,reserve(n)预分配至少能容纳n个元素的内存,避免频繁扩容带来的性能开销。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
std::cout << "初始容量: " << vec.capacity() << std::endl; // 输出0
vec.reserve(10); // 预分配至少10个元素的容量
std::cout << "预分配后容量: " << vec.capacity() << std::endl; // 输出大于等于10
return 0;
}
resize()
调整容器的大小,如果新的大小大于当前大小,会用默认值或者指定值填充新增元素;如果小于当前大小,会删除多余的元素。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3};
vec.resize(5); // 大小调整为5,新增元素用0填充
for (int num : vec) {
std::cout << num << " "; // 输出1 2 3 0 0
}
std::cout << std::endl;
vec.resize(2); // 大小调整为2,删除后3个元素
for (int num : vec) {
std::cout << num << " "; // 输出1 2
}
return 0;
}
修改容器相关方法
这类方法用于向容器中添加、删除元素,或者修改容器内容。
push_back()和pop_back()
push_back(val)在容器末尾添加一个元素,pop_back()删除容器末尾的元素,调用pop_back()前需要确保容器不为空。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
vec.push_back(10); // 末尾添加10
vec.push_back(20); // 末尾添加20
for (int num : vec) {
std::cout << num << " "; // 输出10 20
}
std::cout << std::endl;
vec.pop_back(); // 删除末尾元素
for (int num : vec) {
std::cout << num << " "; // 输出10
}
return 0;
}
insert()
在指定位置插入一个或多个元素,第一个参数是迭代器指向的插入位置,后面的参数是要插入的元素或元素范围。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3};
// 在第二个位置(索引1)插入元素10
vec.insert(vec.begin() + 1, 10);
for (int num : vec) {
std::cout << num << " "; // 输出1 10 2 3
}
std::cout << std::endl;
// 插入3个值为20的元素
vec.insert(vec.end(), 3, 20);
for (int num : vec) {
std::cout << num << " "; // 输出1 10 2 3 20 20 20
}
return 0;
}
erase()
删除指定位置或指定范围的元素,参数是迭代器,返回被删除元素之后的第一个有效迭代器。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 删除第二个元素(索引1)
vec.erase(vec.begin() + 1);
for (int num : vec) {
std::cout << num << " "; // 输出1 3 4 5
}
std::cout << std::endl;
// 删除前两个元素(索引0和1)
vec.erase(vec.begin(), vec.begin() + 2);
for (int num : vec) {
std::cout << num << " "; // 输出4 5
}
return 0;
}
clear()
清空容器中的所有元素,调用后size()返回0,但capacity()通常不会变化。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4};
vec.clear();
std::cout << "清空后元素数量: " << vec.size() << std::endl; // 输出0
std::cout << "清空后容量: " << vec.capacity() << std::endl; // 输出4(容量不变)
return 0;
}
swap()
交换两个vector的内容,包括元素和容量,效率很高,是O(1)操作。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5};
vec1.swap(vec2);
std::cout << "vec1元素: ";
for (int num : vec1) {
std::cout << num << " "; // 输出4 5
}
std::cout << std::endl;
std::cout << "vec2元素: ";
for (int num : vec2) {
std::cout << num << " "; // 输出1 2 3
}
return 0;
}
迭代器相关方法
vector提供了多种迭代器用于遍历容器元素。
| 方法 | 说明 |
|---|---|
| begin() | 返回指向第一个元素的迭代器 |
| end() | 返回指向最后一个元素之后位置的迭代器 |
| rbegin() | 返回指向最后一个元素的反向迭代器 |
| rend() | 返回指向第一个元素之前位置的反向迭代器 |
| cbegin()/cend() | 返回const迭代器,不能修改指向的元素 |
迭代器的基本使用示例如下:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4};
// 正向迭代器遍历
std::cout << "正向遍历: ";
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 反向迭代器遍历
std::cout << "反向遍历: ";
for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
std::cout << *it << " ";
}
return 0;
}
使用注意事项
- 使用
operator[]访问元素时要确保下标合法,避免越界访问导致未定义行为。 - 频繁向vector末尾添加元素时,提前用
reserve()预分配容量可以减少扩容次数,提升性能。 - 调用
pop_back()、front()、back()等方法前,要先判断容器是否为空。 - vector的迭代器在插入、删除元素后可能会失效,不要使用失效的迭代器继续操作容器。
C++_vectorvector常用方法vector容器vector高频函数修改时间:2026-07-02 14:15:23