C++ STL容器--vector详解 目录1. vector的介绍1.1 什么是vector2. vector的基本定义2.1 无参构造2.2 构造n个元素2.3 拷贝构造2.4 迭代器区间构造3. vector迭代器3.1 begin 和 end3.2 迭代器遍历3.3 范围for遍历3.4 修改元素4. vector容量接口4.1 size()4.2 capacity()4.3 empty()4.4 resize()resize特点扩容时缩容时4.5 reserve()reserve的重要意义5. vector扩容机制5.1 VS下扩容5.2 g下扩容6. vector增删查改6.1 push_back()6.2 pop_back()6.3 operator[]6.4 insert()6.5 erase()6.6 swap()6.7 find()示例7. vector迭代器失效7.1 什么是迭代器失效7.2 哪些操作会导致失效① 扩容相关示例7.3 erase导致失效错误写法为什么错正确写法erase返回值8. vector二维数组理解定义二维vector示例resize后1. vector的介绍1.1 什么是vectorvector是C STL标准模板库中的一种顺序容器本质上可以理解为动态顺序表动态数组它的特点底层是连续空间支持随机访问支持动态扩容尾插尾删效率高使用时需要#include vector using namespace std;2. vector的基本定义2.1 无参构造vectorint v;创建一个空vector。2.2 构造n个元素vectorint v(5, 1);结果1 1 1 1 12.3 拷贝构造vectorint v1(5, 1); vectorint v2(v1);2.4 迭代器区间构造vectorint v1(5, 1); vectorint v2( v1.begin(), v1.end() );迭代器的介绍见以下内容3. vector迭代器vector支持迭代器遍历。3.1 begin 和 endvectorint::iterator it v.begin();说明接口作用begin()第一个元素位置end()最后元素下一个位置3.2 迭代器遍历#includeiostream #includevector using namespace std; int main() { vectorint v{1,2,3,4,5}; vectorint::iterator it v.begin(); while(it ! v.end()) { cout *it ; it; } return 0; }3.3 范围for遍历C11推荐写法for(auto e : v) { cout e ; }3.4 修改元素for(auto e : v) { e * 2; }4. vector容量接口4.1 size()获取有效元素个数。cout v.size();4.2 capacity()获取容量大小。cout v.capacity();4.3 empty()判断是否为空。if(v.empty()) { cout 为空; }4.4 resize()修改size。vectorint v; v.resize(10, 1);结果1 1 1 1 1 1 1 1 1 1resize特点扩容时会开空间初始化缩容时仅减少有效数据capacity一般不变。4.5 reserve()预留空间。v.reserve(100);作用只改变capacity不改变sizereserve的重要意义提前扩容vectorint v; v.reserve(100000);可以减少扩容次数数据搬迁次数提高效率。5. vector扩容机制5.1 VS下扩容VS通常按1.5倍扩容。5.2 g下扩容Linux下通常2倍扩容6. vector增删查改6.1 push_back()尾插。v.push_back(10);6.2 pop_back()尾删。v.pop_back();6.3 operator[]像数组一样访问。cout v[0];6.4 insert()插入。v.insert(v.begin(), 100);//头插 v.insert(v.begin()3, 100);//下标为3的位置插入6.5 erase()删除。v.erase(v.begin());//尾删 v.erase(v.begin()3);//下标为3的位置删除psinserterase只能传迭代器不能像string一样传下标6.6 swap()交换两个vector。v1.swap(v2);6.7 find()find不是vector成员函数。属于算法库#includealgorithm示例auto pos find(v.begin(), v.end(), 3);7. vector迭代器失效7.1 什么是迭代器失效vector底层本质T*即指针。如果空间被释放元素被移动那么原来的迭代器指向非法空间继续使用程序崩溃结果错误7.2 哪些操作会导致失效① 扩容相关例如push_back insert reserve resize assign因为旧空间会释放示例vectorint v{1,2,3}; auto it v.begin(); v.reserve(100); cout *it;此时it已经失效7.3 erase导致失效错误写法while(it ! v.end()) { if(*it % 2 0) v.erase(it); it; }为什么错因为erase(it)之后it已经失效继续it非法。正确写法while(it ! v.end()) { if(*it % 2 0) it v.erase(it); else it; }erase返回值erase会返回删除位置下一个元素的迭代器因此必须接收。8. vector二维数组理解定义二维vectorvectorvectorint vv(n);本质vv中每个元素 本身又是vectorint示例vectorvectorint vv(5);相当于vv有5行 每行是一个vectorint但每行开始为空resize后vv[i].resize(i1, 1);每行元素初始化为1。