开始为了找工作来学STL源码解析了,以前认为C++的容器也就是会用就行了,可是最近听一个实验室的朋友说一个著名给他电话面试问到了一个关于让他写一个自己的容器的问题,当时他就傻了,没回答上(他还是很强的,基础挺好),自然是被拒了。
后来我才认识到容器的重要性。买了本《STL源码解析》开始看,这是第一次写学习STL的一些认识自当加深印象,可能不对大家多指正。
我先看了关于vector的部分,因为也是我最常用的容器了。其实也就是一个模板类,以前学的时候还在想这个模板函数(类)怎么用,这次终于有例子了。基本符合以前学的类定义,唯一让我感到没见过的就是第一开始定义的public 里面用了一些像 tydedef T value_type; 。 这我认为是为了名字更加具象化些。一些vector的具体函数就不细说了。
接下来说说他的数据结构:线性连续空间(一个可以扩展的栈)。这个数据结构的特点是以start做开始(栈底), finish(栈尾,最后一个元素的下一个位置),end_of_storage(分配空间的大小)三个指针做标记。当finish 和end_of_storage 重合(满载)的时候证明分配的空间已经沾满了这时候空间会以2倍的速度增长(容量扩充2倍)。其实这也就说明了vector容器的效率会被降低,因为在扩充两倍的时候如果能在原有的连续空间上扩充还好,如果原有的连续空间不够了就要重新寻找一个连续的2倍空间去存储,会吧原先的数据原封的复制过来,这就形成了消耗。因为插入数据重 新寻找存储的区域,所以指向存储的指针会变,所以运用迭代器的时候禁止元素的插入。
先写到这里吧,有一些内容还不是太懂,就是存储,想在以后一个博客中重点写写容器的存储分配。