既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
}
cout << endl;
for (int i = 0; i < v.size(); i++)// []访问
{
cout << v[i] << " ";
}
cout << endl;
return 0;
}
#### 1.2.3 vector类对象的容量操作
>
> **`size` 获取数据个数
> `capacity` 获取容量大小
> `empty` 判断是否为空
> `reserve` 扩容
> `resize` 扩容+初始化**
>
>
>
int main()
{
vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
cout << v.size() << endl;// 获取数据个数
cout << v.capacity() << endl;// 获取容量大小
cout << v.empty() << endl;// 判断是否为空
v.reserve(10);// 扩容
cout << “newsize:” << v.size() << endl;
cout << “newcapacity:” << v.capacity() << endl;
v.resize(10);// 扩容 + 初始化
cout << “newsize:” << v.size() << endl;
cout << “newcapacity:” << v.capacity() << endl;
return 0;
}
结果:
>
> 4
> 4
> 0
> newsize:4
> newcapacity:10
> newsize:10
> newcapacity:10
>
>
>
#### 1.2.4 vector类对象的修改操作
>
> **`push_back` 尾插
> `pop_back` 尾删
> `assign` 覆盖
> `find` 查找(注意这个是算法模块实现,不是vector的成员接口)
> `sort` 排序(注意这个是算法模块实现,不是vector的成员接口)
> `insert` 在position之前插入val
> `erase` 删除position位置的数据
> `swap` 交换两个vector的数据空间**
>
>
>
除了assign和find其他接口在string类的概述里面讲过,他们都大同小异。
[【C++】string类概述](https://bbs.csdn.net/topics/618668825)
int main()
{
vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.assign(4, 10);// 覆盖
for (auto e : v)
{
cout << e << " ";
}
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/93652d21ba9a4351a58fbe2d5b376109.png#pic_center)
**使用find和sort前要先引入库函数:`#include <algorithm>`**
int main()
{
vector v;
v.push_back(5);
v.push_back(4);
v.push_back(3);
v.push_back(2);
v.push_back(7);
v.push_back(1);
v.push_back(6);
vector::iterator it = find(v.begin(), v.end(), 6);// 查找
cout << *it << endl;
sort(v.begin(), v.end());// 排序
for (auto e : v)
{
cout << e << " ";
}
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/8fbe32c18ddf49319d0935a9809df717.png#pic_center)
## 二、迭代器失效问题
**首先要知道迭代器的底层是指针,或者是对指针进行了封装,vector的原生态指针就是`T*`。
而迭代器失效就是指针指向的空间被销毁了,如果继续使用,就会造成崩溃。**
**对于vector可能会导致其迭代器失效的操作有:
引起其底层空间容量改变的操作,都有可能是迭代器失效,比如:resize、reserve、insert、assign、push\_back等**
**例如:**
int main()
{
vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
vector::iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
it++;
}
v.reserve(10);
while (it != v.end())
{
cout << *it << " ";
it++;
}
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/e475b34dfe86418895ca6e2dc7dcaa8d.png#pic_center)
**迭代器失效解决办法:在使用前,对迭代器重新赋值即可。**,后面的模拟实现会讲解。
![img](https://img-blog.csdnimg.cn/img_convert/e4dfdb838b8ef2cd58ba81b8b1109a42.png)
![img](https://img-blog.csdnimg.cn/img_convert/89c8d4d6d1b3b784d099495e5a0d327a.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**