c++中vector详解
时间: 2025-06-30 14:12:25 浏览: 12
C++中的`std::vector`是一个动态数组容器,属于标准模板库(STL)的一部分。它提供了在运行时动态调整大小的能力,并且支持随机访问元素[^1]。
### 功能与特性
#### 1. 动态大小
`std::vector`可以在程序执行期间动态地增加或减少其大小。这意味着不需要预先知道数组的大小[^1]。
```cpp
std::vector<int> vec;
vec.push_back(10); // 添加元素到向量末尾
vec.pop_back(); // 移除最后一个元素
```
#### 2. 随机访问
可以通过索引直接访问`std::vector`中的任意元素,这使得访问速度非常快[^1]。
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
int thirdElement = vec[2]; // 访问第三个元素
```
#### 3. 迭代器支持
`std::vector`支持迭代器,可以用来遍历容器中的元素。这对于删除特定条件下的元素特别有用。
```cpp
std::vector<int> a = {12, 23, 34, 45, 56, 67, 78, 89};
auto iter = a.begin();
while (iter != a.end()) {
if (*iter > 30) {
iter = a.erase(iter); // 删除大于30的元素并更新迭代器
} else {
++iter; // 否则继续下一个元素
}
}
```
#### 4. 容量管理
`std::vector`提供了多种方法来管理和查询容量,如`capacity()`、`reserve()`和`shrink_to_fit()`等。
```cpp
std::vector<int> vec;
vec.reserve(100); // 预留至少能容纳100个元素的空间
vec.shrink_to_fit(); // 尝试减少内存使用以匹配当前元素数量
```
#### 5. 元素插入与删除
除了`push_back`和`pop_back`之外,还可以使用`insert`和`erase`来进行更复杂的操作。
```cpp
std::vector<int> vec = {1, 2, 4, 5};
vec.insert(vec.begin() + 2, 3); // 在第三个位置插入3
vec.erase(vec.begin() + 2); // 删除第三个位置的元素
```
#### 6. 空间分配
当需要更多的空间时,`std::vector`会自动重新分配内存。这种行为可以通过`allocator`来定制。
```cpp
std::vector<int>::allocator_type alloc = vec.get_allocator();
```
#### 7. 异常安全性
大多数`std::vector`的操作都保证了基本的异常安全,即如果抛出异常,对象的状态仍然有效。
#### 8. 性能优化
由于`std::vector`内部实现为连续存储,因此对于顺序访问和缓存友好性非常好。然而,频繁的插入和删除可能导致性能下降[^1]。
#### 9. 多维向量
`std::vector`也可以嵌套使用,创建多维数组结构[^1]。
```cpp
std::vector<std::vector<int>> matrix = {{1, 2}, {3, 4}};
```
#### 10. 自定义类型支持
不仅可以存储内置类型的元素,还可以存储用户自定义类的对象。
```cpp
struct Point {
int x, y;
};
std::vector<Point> points;
points.push_back({1, 2});
```
通过上述功能和特性的介绍,可以看到`std::vector`是一个强大而灵活的数据结构,适用于各种不同的应用场景。正确理解和利用这些特性可以帮助开发者编写高效且易于维护的代码。
阅读全文
相关推荐














