当前位置: 首页 > news >正文

vector的使用与实现

1.对vector使用的介绍

(1)模板迭代器变量的使用要加上类型

vector<int>::iterator it;

(2)扩容机理是以1.5倍的扩(vs环境)

(3)reverse(size_t n) 至少开到n的空间但不允许缩容

(4)resize(size_t n,value_type T = value_type()) n小于size就删数据,大于size就插入数据,空间不够就扩容.value_type的类型就是class T中的T.

内置类型也是有构造函数的如int(),不加参数时的默认值是0.

vector的内部是由_begin,_finish,_end_of_storage这三个迭代器,因此后面的成员函数的参数基本都不会用下标了而是用迭代器.

(5)insert(vector<T>::iterator it),用一个迭代器的位置表示要插入的数据位置.

(6)vector和string是不能相互替换使用的,核心原因在于vector不会自动生成'\0'还有vector比string少很多功能.

(7)vector<vector<int>>用顺序表模拟二维数组.

在vector中有:

在生成vector<vector<int>>时编译器会为此生成两个模板函数

对第一个双循环arr[a]就是对vector<vector<int>>中的每一个vector<int>进行访问然后进行push_back(会有扩容操作).

第二个双循环就是arr[a]对vector<vector<int>>中的每一个vector<int>进行访问,然后第二个[]就是对该vector<int>中的数据进行访问.

2.模拟实现vector

由于模板不能分离文件使用,因此全部在vector.h中实现.

(1)大框

修改:

(2) size() capacity() start() end()

(3)[]重载

(4)reserve和push_back和=重载

只能用新写法,因为旧写法会调用reserve,而reserve要深拷贝时又会调用=重载,造成死循环.

旧写法:

由于使用迭代器实现的,因此不能再使用memcpy了.

tmp = new T[v.size];memcpy(tmp,v);copy后tmp的迭代器会全部指向旧空间.

reserve

不能用memcpy,因为这是浅拷贝,在拷贝类类型是会出现问题.

push_back

(5)几种构造函数

类内部的模板类型可以省略掉类型,类外不行.

如vector& operator=(vector v)这种省略<T>的写法也是可以的但不推荐这样写.

类模板的成员函数还可以是新的函数模板.

[1] 迭代器的区间构造

意义:实现不同容器之间的数据拷贝,只需二者的内部数据类型相同即可.

[2]拷贝构造

[3]拷贝一整串

在T为非整形类型时是可以成立的,但是如果为整型时,编译器的优先用参数类型最符合的机制会使其去调用迭代器的函数是程序error,解决方法就是再写一个函数.

[6]析构

[7]resize

[7]打印

是全局函数,使用一个新的模板是为了兼容其他容器.

[7]delete ,empty

剩下的一些函数再分成几个小结

4.没有实例化的类不能去类域中找东西

例:

void print(const vector<T>& v)

{

vector<T>::const_iterator it = v.begin();
}

这是一句不能运行的代码.因为编译器无法区分const_iterator是typedef的变量名还是const成员,因此会报错.

typename vector<T>::const_iterator it = v.begin();
解法就是在前面加一个typename,这样编译器就会将const_iterator识别为typedef的变量名.

5.迭代器失效

insert函数

更新pos的原因是空间更新后,pos还指向旧空间使程序会卡死,这也叫迭代器失效.

但是pos在这里是形参,在外部的pos实参已经不能用了.想要再用的话只能return pos形参从外部接收更新pos才行.

erase后pos以及pos之后的迭代器都视为失效只能通过返回新pos来更新外部的pos.

http://www.jsqmd.com/news/461079/

相关文章:

  • 在内核进行设备注册的作用
  • 2026年口碑好的MS微动电动工具开关厂家推荐:TS扳机电动工具开关/RS翘板电动工具开关品牌厂家哪家靠谱 - 品牌宣传支持者
  • 合肥2026年事业单位考试平台怎么选?五大机构综合测评报告 - 2026年企业推荐榜
  • 2026年热门的乐清防水轻触开关工厂推荐:乐清多功能轻触开关供应商怎么选 - 品牌宣传支持者
  • 2026年专业光伏直销公司评测:鑫杰宇新能源领跑榜单 - 2026年企业推荐榜
  • 2026年比较好的固态硅胶泡棉压延机公司推荐:液态硅胶泡棉压延机值得信赖的生产厂家 - 品牌宣传支持者
  • 2026威海景观松采购必看:高性价比服务商五强深度解析 - 2026年企业推荐榜
  • 2026年唐山Q700薄壁钢模板优质厂商盘点与采购指南 - 2026年企业推荐榜
  • 2026年大平层装修设计服务商综合评测与选型指南 - 2026年企业推荐榜
  • 2026年唐山拉片型钢模板哪家强?五大生产商综合评测 - 2026年企业推荐榜
  • 2026年西藏破碎机优质公司综合评估与精选推荐 - 2026年企业推荐榜
  • 精工手串选购指南:2026年至今业内实力厂商推荐 - 2026年企业推荐榜
  • 2026年阜阳图文印刷实力厂商综合评测与选型指南 - 2026年企业推荐榜
  • 2026年Q1河北镀膜机实力机构盘点与选购指南 - 2026年企业推荐榜
  • 2026年3月珍珠棉包装材料源头工厂五大选择标准解析 - 2026年企业推荐榜
  • Open3d.art:当 AI 不再只是工具,而是与你共享心灵场的伙伴
  • 2026年Q1安徽图文快印服务商综合评估与推荐 - 2026年企业推荐榜
  • 2026年Q1湖北园林工程服务品牌综合评估与精选推荐 - 2026年企业推荐榜
  • 2026年河北唐山地区脱硫服务实力企业盘点 - 2026年企业推荐榜
  • 安徽镀锌桥架实力厂家TOP6推荐(2026年3月) - 2026年企业推荐榜
  • 2026江苏保温系统门窗选购指南:五大品牌深度评测 - 2026年企业推荐榜
  • 2026年河南铝艺大门源头厂家实力盘点与推荐 - 2026年企业推荐榜
  • 秸秆粉碎机模型设计(solidworks+step)
  • 2026年3月公考机构选择:六大口碑机构深度评估 - 2026年企业推荐榜
  • 2026年Q1豆包关键词优化服务商权威评测:摘星AI为何领跑? - 2026年企业推荐榜
  • 2026年杨浦区高端装修公司评测:如何选择靠谱服务商? - 2026年企业推荐榜
  • 皮带机张紧装置CAD图
  • 2026年一季度湖北专精特新申报服务商综合盘点 - 2026年企业推荐榜
  • 2026年餐梯市场实力厂商盘点与联系指南 - 2026年企业推荐榜
  • 离合器从动盘扭转试验机(CAD装配图)