java stl容器_STL(“容器”集合)讲解

2.2迭代器

迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。

说到迭代器,咋们再往深研究一下,迭代器从作用上来说是最基本的部分。不过,在研究迭代器之前,我们得先搞清楚软件设计的一个最基本的原则。软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。

迭代器部分主要由头文件,和组成。是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,中提供了迭代器使用的许多方法,而对于的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

2.3算法

STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。

算法部分主要由头文件,和组成。是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。中则定义了一些模板类,用以声明函数对象。

一个容器就是一些特定类型对象的集合。顺序容器(sequential Container)为程序员提供了控制元素存储和访问顺序的能力,这种访问顺序是不依赖元素的值,而是与元素假如容器时的位置相对应。

标准库中提供了以下顺序容器,所有顺序容器都提供了快速顺序访问元素的能力,如下。

顺序容器类型

vector

可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。

deque

双端队列。支持快速快速访问。在头尾位置插入/删除速度很快。

list

双向链表。只支持双向顺序访问。在list中任何位置进行插入/删除操作速度都很快。

forward_list

单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作速度都很快。

array

固定大小数组。支持快速随机访问,不能添加或删除元素。

string

与vector相似的容器,但专门用于保存字符。随机访问快,在尾部插入/删除都很快。

以下是一些选择容器的基本原则(具体视情况而定,这里只是一般情况):

1、通常vector是最好的选择,除非你有很好的理由选择其他容器;

2、如果程序有很多小的元素,且空间额外开销很重要,则不要使用list或forward_list容器;

3、如果程序要求随机访问,应使用vector或deque容器;

4、如果程序要在头尾位置插入/删除,且不会在中间位置进行插入/删除操作,则应使用deque容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值