STL编程概述(二)

本文介绍了STL中的多种容器,包括序列式容器和关联式容器。序列式容器如vector、list和deque提供了对元素的快速访问及高效插入和删除操作;关联式容器如set和map用于存储键值对数据。此外,还探讨了容器成员必须满足的条件。
摘要由CSDN通过智能技术生成
STL容器类是可以包含其他对象的类。就像数组,队列,堆栈等数据结构可以包含整数,小数,类等数据成员一样,STL包含常见的向量类,链表类,双向队列类,集合类和图类,每一个类都是一种模板,并且这种模板可以包含各种类型的对象。
容器可以分成两大类,序列式容器(SEQUENCE CONTAINER) 和关联式容器(ASSOCIATE SEQUENCE CONTAINER )。在序列式容器中主要有vector、list、
stack、queue、priority_queue和deque;而关联式容器则包括:set、map、multiset和multimap。
  • vector是一种大小可变的序列,比较灵活。
  • list是一个双向链表容器,完成了标准的C++数据结构中链表的所有功能。
  • queue是一个队列容器,完成了标准的C++数据结构中队列的所有功能。
  • stack是一个堆栈容器,完成了标准的C++数据结构中堆栈的所有功能。
  • deque是一个双端队列容器,完成了标准的C++数据结构中队列的所有功能。
  • set是一个集合容器,不允许出现重复元素。
  • map是一个关联式容器。

容器技术概述
STL提供多种容器,由于每种容器都包含一组操作行为,所以其所含的成员,值得研究。容器成员必须满足一下三个条件:

  • 元素必须是可拷贝的。所有容器都会产生一份自己的元素副本,这样才不会发生别名问题(指两个不同的对象代表相同一块内存)。所有容器操作行为传回的也都是其元素的一个副本。
  • 元素必须是可释放的(通过析构函数)。当使用者将元素从容器中删除时,意味着容器必须释放其元素所占空间。因此元素类所具备的析构函数决不能被设计为私有的。
  • 元素必须是可赋值的,容器的操作行为以及各种STL算法,都利用赋值操作符来为元素指派新值。

序列式容器:

  • vector一个随机访问的序列容器,它提供了对容器内元素的快速,随机的访问,以及序列尾部快速的插入和删除操作。它在需要时可以改变容器的大小,可取代C++语言自身的数组。vector提供随机存取的能力,序列尾部的速度最快。
  • list 一个双向链表容器,不支持容器内元素的随机访问。插入和删除操作的效率是固定的。注意:许多STL算法在list容器上会有不佳的效率,因为这些算法主要是进行元素的移动,list自身实现的算法,只操作指针,而非真正复制或移动元素。如:list自身存在成员函数remove ,算法中也存在remove函数,应该优先选用list 自身的成员函数remove.

  • deque 一个随机访问的序列容器,他提供了对容器内元素的快速,随机的访问,以及序列首部和尾部快速的插入和删除操作。

  • stack 一个栈容器,提供入栈,出栈,获取栈顶元素等操作,实现先入后出(FILO)的特性

  • queue 一个队列容器,实现先入先出(FIFO)的特性。

关联式容器

  • 无序表(unordered table)C++11标准引入。
  • set 一个随机存取的集合容器
  • map一个关联存取的集合容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值