Effective STL - 容器

STL(standard template library)提供了一组表示容器,迭代器,函数对象和算法的模板。容器是一个与数组相似的单元,能够存若干个值。 node

STL容器是同质的,即存储的值的类型相同;算法是完成特定任务的处方;迭代器是可以用来遍历容器的对象,与可以遍历数组的指针相似,是广义指针;函数对象是相似于函数的对象,能够是类对象或函数指针(包括函数名,由于函数名被用做指针)。 算法

STL不是面向对象编程,而是一种不一样的编程模式-通用编程模式(generic programming)。 编程

1. 慎重选择容器类型 数组

  • 标准STL序列容器: vector, string, deque 和 list.
  • 标准STL关联容器:set, multiset, map 和 multimap.
  • 非标准序列容器slist 和 rope.
  • 非标准的关联容器 hash_set, hash_multiset, hash_map 和 hash_multimap.

  基于算法复杂性考虑: 数据结构

    vector是默认应使用的序列类型;当须要频繁地在序列中间作插入和删除操做时,应使用list;当大多数插入和删除操做发生在序列的头部和尾部时,deque是应考虑的数据结构。 函数

   STL一种分类方法:连续内存容器(contiguous-memory container)和 基于节点的容器(node-based container)。 spa

 

2. vector  指针

   vector是一个可以存听任意类型的动态数组,可以增长和压缩数据。 对象

  • 将元素置于一个动态数组中进行管理
  • 能够随机存取元素(用索引直接存取)
  • 在数组尾部添加或移除元素很是快速,可是在中部和头部安插元素比较费时

  使用说明: 索引

  使用vector前,必须包含头文件<vector>

  例: vector<int> vec;

        操做:vec.size() //容器实际数据的个数

                vec.begin()//指向迭代器中的第一个数据地址

                vec.capacity() //返回容器中数据的个数

                vec.empty() //判断容器是否为空

                vec.front() //返回第一个数据

                vec.push_back(element) //在尾部加入一个元素

                vec.pop_back(element) //删除最后一个数据

                vec.end() //指向迭代器中末端的下一个,指向不存在元素

3. deque

    是一种具备队列和栈的性质的数据结构。

  • deque,是 double-ended queue 缩写
  • 能够随机存取元素(用索引直接存取)
  • 在数组尾部添加或移除元素很是快速,可是在中部和头部安插元素比较费时

4. list

  • 双向链表
  • 不提供随机存取(按顺序走到须要存取的元素,O(n))
  • 在任何位置插入和删除都很是迅速,内部只需调整一下指针

5.  iterator

  iterator(迭代器) 是一种对象,它可以用爱遍历标准模板库容器中的部分或所有元素,每一个迭代器对象表明容器中的肯定地址。迭代器修改了常规指针的接口。

  • 迭代器是一个所谓的智能指针,具备遍历复杂数据结构的能力。迭代器是一个“可遍历stl容器内所有或部分元素”的对象
  • 一个迭代器指出容器的一个特殊位置
  • 具备遍历复杂数据结构的能力

6. 容器的共通能力

   全部容器提供都是value语义,而非reference。容器执行插入元素的操做时,内部实施拷贝动做。因此STL容器内存储的元素必须可以被拷贝(必须提供拷贝构造函数)。

   每一个容器都提供可返回迭代器的函数,运用返回的迭代器就能够访问元素。
  
一般STL不会丢出异常。要求使用运行者对确保传入正确的参数。

7. 容器的共通操做

   1) 与大小相关的操做函数

        c.size()  传回容器中的元素数量

        c.empty() 判断容器是否为空

        c.max_size() 传回元素最大可能数量

   2)返回迭代器的函数

        c.begin()

        c.end()

        c.rbegin()  返回一个逆向迭代器,指向逆向寻访时的第一元素

        c.rend()

相关文章
相关标签/搜索