1、VECTOR是一种将数据存放在连续内存上有序容器。
其关键的实现技术在于
a:容器大小的分配
b:内存重新分配时的数据移动效率。
注意点:所谓的动态内存分配,并不是直接在原来的地址后面重新申请一块内存拼接上去(因为有可能原地址后面可用的
内存大小满足不了新的需求),而是重新申请一块是原来内存大小的两倍值。然后将旧数据从原空间拷贝到新空间上,在
开始在后面内存构建新插入的元素。
浪费,而且list对元素的插入和移除永远都是常数时间。
根据应用是要频繁随机存取 还是要频繁 插入删除 。而选择 vector和list.
4、deque是由多块内存组成的逻辑地址连续的双向开口可插入容器(vector是建立在物理地址连续的内存空间上,且只有单向开口),
正是因为deque不需要要求内存是要一整块连续的,所以deque不存在像vector容器需要的a、内存重分配 b、数据复制 c、旧内存释放
其关键的实现技术在于
a:容器大小的分配
b:内存重新分配时的数据移动效率。
注意点:所谓的动态内存分配,并不是直接在原来的地址后面重新申请一块内存拼接上去(因为有可能原地址后面可用的
内存大小满足不了新的需求),而是重新申请一块是原来内存大小的两倍值。然后将旧数据从原空间拷贝到新空间上,在
开始在后面内存构建新插入的元素。
so,对引起vector内存大小重新分配的操作后,原来的vector迭代器将全部失效。这就是我们所说的迭代器失效经过。
浪费,而且list对元素的插入和移除永远都是常数时间。
list任何操作都不会是存在的 迭代器失效(vector大小重组后迭代器会失效)
根据应用是要频繁随机存取 还是要频繁 插入删除 。而选择 vector和list.
4、deque是由多块内存组成的逻辑地址连续的双向开口可插入容器(vector是建立在物理地址连续的内存空间上,且只有单向开口),
正是因为deque不需要要求内存是要一整块连续的,所以deque不存在像vector容器需要的a、内存重分配 b、数据复制 c、旧内存释放