2024年最全【C++】vector类概述_vc vector<int>v(),最新C C++架构师成长路线

img
img

既有适合小白学习的零基础资料,也有适合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)**

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值