stl的中常用几个容器的介绍与特点。

<1>vector容器

     vector容器是一个动态数组的结构,在内存中有一个指针指向一块连续的内存。类似数组结构一样。它的特点支持随机访问数据,因为其在内存中的单元是连续。如此之外,还可以vector的大小是可以自动增长的。当向一个vector中继续存放数据的时候,如果当前的内存大小不够,内核会重新生成一个是原来两倍的大小的单元,之后 将数据从原先的单元中拷贝至新创建的单元中,并将原来的单元释放掉。(但是所谓的释放单元,仅仅是想原来单元中的数据清空,相应的内存单元还是存在的)

优点:支持随机访问,所以查询效率高。

缺点:当向其分非尾插入元素时,因内存单元需要移动数据元素,所以插入的效率比较低。

适用场景:适用于对象简单,变化较小,并且频繁随机访问的场景。

2.list容器

  list容器在内存中的结构是类似双向链表结构,每个元素的内存单元结构是不连续的,彼此之间通存储相关的地址进行关联。由于在内存中的单元不是连续的,所以其比支持随机访问,不具备[]操作运算。每一个节点都有三个域,前驱节点指针域,数据域,后驱节点指针域。

有点:因为只类似链表结构在内存中,所以任意位置删除节点和插入节点都是高效的。

缺点:因为内存单元不连续,所以不支持随机访问操作。

适用场景:对象变化大,并且对象数量变化频繁,删除和插入操作的情况。

3.map容器

map容器是一个关联式容器。在其内部元素的存储结构是通过key-value结构进行存储,并且其key是唯一存在的。支持那种一对一的数据处理过程。其底层是通过rbtree来实现的,利用红黑树的一种严格的平衡二叉树结构实现。在其实现过程,自动创建key-value的插入数据的过程。并且支持快速的查找,通过键值可进行快速的查找对应的数据元素。以及快速删除操作。

以上容器先关提供的相关方法,请参考网上资料这里不再叙述,还有一种hashmap的的容器,参考本博客中的hashmap的介绍。

猜你喜欢

转载自blog.csdn.net/qq_26105397/article/details/80443804