4-3(vector的底层实现)

vector表示的是可变大小的数组,可是其类型不肯定,由于是模板类。因此其尾部没有\0,也就是不须要空一个位置存储\0。数组

其主要由3个指针控制其数组:ide

_start:指向其数组的首元素。函数

_finish:指向其数组有效元素的后一位,也就是size=_finish-_start.也至关于指向的是size位置。spa

_endofstorage:指向的是数组能够存储有效元素的后一位,也就是capacity=_endofstorage-_start;指针

也就是至关于指向的是capacity。内存

其主要操做是经过迭代器来实现的。ci

insert:再pos位置前面插入一个数据it

erase:删除pos位置的数据,并返回删除元素的下一个元素位置。模板

vector里面没有find函数,若是想要使用find,得在algorithm库里面,find(v.begin(),v.end(),x);class

若是找到返回位置,不然返回end();


迭代器失效问题:

主要由2个方面:

一、扩容:当迭代器指向了某个空间位置时,忽然使用push_back 或insert等,使原来空间发生变化时,这时迭代器会失效。(也就是it是指向的旧内存空间被delete,而it还指向其旧空间)

2、erase:当删除迭代器所指元素时,此时的it会失效。须要从新赋值。

解决迭代器失效的办法就是将其从新赋值。

memcpy是浅拷贝,当拷贝自定义类型时,没有错,可是拷贝自定义类型时,就会出错。

相关文章
相关标签/搜索