• STL学习笔记(第五章 STL组件)


    STL组件

    若干精心勾画的组件共同合作,构筑起STL的基础。这些组件最关键的是容器、迭代器和算法。

    下图演示了STL组件之间的合作

    容器(Containers)

    容器类别(简称容器)用来管理一组元素。为了适应不同需求,STL提供了不同类型的容器。

    总的来说,容器可分为两类:

    1.序列式容器Sequence containers,此乃可序群集,其中每个元素均有固定位置(取决于插入时机和地点,和元素值无关)。

       STL提供三个定义好的序列式容器:vector、deque和list。

    2.关联式容器Associative containers,此乃已序群集,元素位置取决于特定的排序准则。

       STL提供了四个关联式容器:set、multiset、map和multimap。

    关于容器的具体操作将在第六章演示。

    迭代器(Iterator)

    迭代器是一个“可遍历STL容器内全部或部分元素”的对象。一个迭代器用来指出容器中的一个特定位置。基本操作如下:

    Operator *

    返回当前位置上的元素值。如果该元素拥有成员,可以直接以operator->取用它们。

    Operator ++

    将迭代器前进至下一元素。大多数迭代器还可使用operator--退回到前一个元素。

    Operator ==和Operator !=

    判断两个迭代器是否指向同一位置。

    Operator =

    为迭代器赋值(将其所指元素的位置赋值进去)。

    所有容器类别都提供有一些成员函数,使我们得以获得迭代器并以之遍历访问所有元素。这些函数中最重要的是:

    begin()

    返回一个迭代器,指向容器起始点,也就是第一个元素(如果有的话)的位置。

    end()

    返回一个迭代器,指向容器借宿点。结束点在最后一个元素之后。

    迭代器分类(Iterator Categories)

    STL预先定义好的所有容器,其迭代器均属于以下两种类型:

    1.双向迭代器(Bidirectional iterator)

      双向迭代器可以双向行进:以递增运算前进或以递减运算后退。list、set、multiset、map和multimap这些容器锁提供的迭代器都属此类。

    2.随机存储迭代器(Random access iterator)

       随机存取迭代器不但具备双向迭代器的所有属性,还具备随机访问能力。即可以对该迭代器增加或减少一个偏移量、处理迭代器之间的距离、使用<和>之泪的操作符来比较两个迭代器。

       vector、deque和strings锁提供的迭代器都属此类。

    算法(Algorithm)

    为了处理容器内的元素,STL提供了一些标准算法,包括搜寻、排序、拷贝、重新排序、修改、数值运算等十分基本而普遍的算法。

    算法并非容器类别的成员函数,而是一种搭配迭代器使用的全局函数。

    仿函数(Functors)

    仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。

    例如我们定义一个类:

    class X{
        public:
            return-value operator()(arguments) const;
            ...  
    };

    然后就可以把这个类别的对象当做函数调用

    X fo;
    ...
    fo(arg1,arg2)  //等价于fo.operator()(arg1,arg2);
  • 相关阅读:
    MARTIN FOWLER谈敏捷开发
    精益创业
    DEVOPS基础
    测试驱动开发
    持续集成(CONTINUOUS INTEGRATION)
    极限编程
    回归测试
    敏捷开发十二原则
    敏捷开发宣言
    敏捷开发简史
  • 原文地址:https://www.cnblogs.com/runnyu/p/4813601.html
Copyright © 2020-2023  润新知