https://blog.csdn.net/weixin_42570248/article/details/98750234
vector 是序列式容器(sequence containers)中的一种,是一个封存了动态大小数组的顺序容器。可以简单的认为,vector就是能够存放任意数据的动态数组,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。
Vector的数据结构
线性连续空间,两个迭代器start和finish分别指向配置得来的连续空间中目前已经被使用的范围(符合STL规范之“前闭后开”),并以迭代器end_of_storage指向整块的连续空间(含备用空间)的尾部。
vector中有容量(capacity)这个概念,这是为了降低空间配置时的运行速度,一个vector的容量永远大于或等于其大小
//在vector当中包含三个迭代器成员变量,分别是:
iterator start // 表示目前使用空间的头
iterator finish // 表示目前使用空间的尾
iterator end_of_storage // 表示目前可用空间的尾
这里需要注意的是,所谓动态增加大小,并不是在原空间之后接续新空间(因为无法保证原空间之后尚可有可供配置的空间),而是以原大小的两倍配置一块较大空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。这是程序员易犯的一个错误,务需小心。
注意事项:在使用迭代器遍历操作vector时,切记不要在循环内部进行任何改变vector大小的操作,一旦引起数据空间重新配置或数据移动,则会造成迭代器失效的状况,进而引发无法预知的错误。