学习笔记4_std::vector
- 是神马?
在cpp中,std::vector是标准模板库STL提供的一种序列容器,可以看作是一个可动态改变大小的数组。vector 是 C++ 中最常用的容器之一,因为它结合了数组的高效随机访问和动态大小的灵活性。
- 主要特点
- 动态大小:不同于普通数组的大小固定,vector会根据元素的增删自动调整存储空间。
- 连续内存:元素在内存中连续存储,可以通过下标快速访问任意元素(随机访问迭代器),时间复杂度O(1)。
- 高效尾操作:在末尾添加(push_back)或者删除(pop_back)元素非常快,均摊时间复杂度O(1)。
- 中间操作较慢:在中间或开头插入/删除元素需要移动后续所有元素,时间复杂度为O(n)。
- 基本用法
|
#include <vector> #include <iostream> int main() { // 创建一个空的 int 类型 vector std::vector<int> vec; // 添加元素 vec.push_back(10); vec.push_back(20); vec.push_back(30); // 访问元素(下标方式,不检查越界) std::cout << vec[1] << std::endl; // 输出 20 // 使用 at() 方法(会检查越界,抛出异常) std::cout << vec.at(2) << std::endl; // 输出 30 // 遍历 for (int x : vec) { std::cout << x << " "; } // 获取大小和容量 std::cout << "size: " << vec.size() << ", capacity: " << vec.capacity() << std::endl; return 0; } |
- 内存管理
- Vector会预先分配一定的内存空间(通过capacity()查看),当元素数量超过当前容量时,会重新 分配更大的内存块(通常是当前容量的两倍),并将所有元素复制/移动到新内存。
- 可以使用reserve(n)提前分配足够容纳n个元素的内存,减少多次重新分配的开销。
- 使用shrink_to_fit()可以请求减小容量以适应当前大小。
- 常用成员函数
|
push_back(val) |
在末尾添加一个元素 |
|
pop_back() |
删除末尾元素 |
|
insert(pos, val) |
在指定位置插入一个或多个元素 |
|
erase(pos) |
删除指定位置的元素 |
|
clear() |
清空所有元素 |
|
size() |
返回当前元素个数 |
|
empty() |
判断是否为空 |
|
resize(n) |
改变元素个数,多余的新元素默认构造 |
|
front() / back() |
返回第一个/最后一个元素的引用 |
|
data() |
返回指向底层数组的指针 |
- 注意!
- 迭代器失效:在插入/删除元素后,原有的迭代器/引用/指针可能失效。
- 下标访问不检查越界:使用operator[]访问越界位置会导致未定义行为;推荐使用at()进行带检查的访问(但是会稍慢)。
- 频繁在中间插入/删除:如果程序需要频繁在非尾部操作,可以考虑使用list或者deque。
更多推荐




所有评论(0)