1.vector迭代器

vector维护一个线性空间,所以不论元素的型别如何,普通指针都可以作为vector
的迭代器,因为vector迭代器所需要的操作行为,如operator*、operator-> .operator++、operator--、operator+、operator-、operator+=、operator-=,普通
指针天生具备。vector 支持随机存取,而普通指针正有着这样的能力。所以vector提供
的是随机访问迭代器(Random Access lterators)。

2.vector的数据结构

vector所采用的数据结构非常简单,线性连续空间,它以两个迭代器_Myfirst 和_Mylast 分别指向配置得来的连续空间中目前已被使用的范围,并以迭代器_Myend指向整块连续内存空间的尾端。
为了降低空间配置时的速度成本,vector 实际配置的大小可能比客户端需大一些,以备将来可能的扩充,这边是容量的概念。换句话说,一个vector容量永远大于或等于其大小,一旦容量等于大小,便是满载,下次再有新增元素,整个vector容器就得另觅居所。
所谓动态增加大小,并不是在原空间之后续接新空间(因为无法保证原空间之后尚有可配置的空间),而是一块更大的内存空间,然后将原数据拷贝新空间,并释放原空间。因此,对vector 的任何操作,一旦引起空间的重新配置,指向原vector 的所有迭代器就都失效了。这是程序员容易犯的一个错误,另必小心。

Posted on 2022-09-24 10:08  LutixiaGit  阅读(18)  评论(0编辑  收藏  举报