c++11 顺序容器概括(1)

第一篇博文,希望不是最后一篇。o(∩_∩)o 哈哈

接下来几篇博文会由浅到深地介绍 STL 超好用的顺序容器。

  • 容器:  就是一些特定类型对象的集合。
  •  顺序容器:  定义:顺序容器是容器的一类。该类容器中,对象(元素)在 容器中的位置 与加入容器的顺序相对应,不依赖元素的值。

              注意:顺序容器几乎可以保存任意类型的元素,但可能限制元素容器操作。详情请看下篇博文。

  •  所有顺序容器公共的 特点 :  所以顺序容器都提供了快速顺序访问元素的能力。

顺序容器的类型

vector(常用) 1.可变大小单向尾部数组 2.支持快速随机访问 3.不在后面插入删除可能速度慢
deque 1.可变大小双向队列 2.支持快速随机访问  3.在头尾插入删除很快
list 1.可变大小双向链表 2.只支持顺序访问 3.在任何位置插入删除很快
forward_list(c++11) 1.可变大小单向头部链表 2.只支持顺序访问 3.在任何位置插入删除很快
array(c++11) 1.固定大小数组 2.支持快速随机访问  3.没插入删除但可以赋值
string

1.和vector很像,特例化,专门用来存字符 如:'a','b'

                           说明:   顺序: 1.元素保存在 连续 的内存空间中,用下标查找很快。

                  但不在 开口地方(开口:vector/string 在尾部,deque 在头尾) 插入删除(array 一边玩去)会很慢。

                   2.用迭代器访问时,支持算术运算符。如: 

1 std::vector<int>::iterator it = v.begin();
2 it = it +2;

             随机: 1.要访问一个元素,需要访问整个容器。但插入删除(array 你又来)很快。

                 2.用迭代器访问时,不支持算术运算符,但支持自增自减。如:

1 std::list<int>::iterator it = v.begin();
2 it = it +2; //错误
3 it++;
4 it++;
  • 有关 c++11 标准容器:

array: 设计目的:更安全,更容易使用数组类型。

    但是 大小固定(安全嘛),所以不支持任何改变容器大小的操作。

forward_list:设计目的:达到的性能 与 我们写的最好的单向链表的性能 相当。

       特别:没有 size 操作。对其他容器来说,size 操作保证是常量时间的操作(包括list)

  • 选择顺序容器的原则:

1.  vertor 是最好的选择,除非你有更好的选择。

2.  有很多小元素,空间开销重要。不要用 list  和 forward_list。

3.  要随机访问:选择 vector 和 deque

4.  要求中间插入删除:list 和 forward_list

5.  要求奇葩,如:要在中间插,然后要随机访问。

         可以用各种方法解决:a. list 存 然后 copy 到 vector。

                   b. 直接用 vector 尾部插入,再用 STL 的 sort 排序到中间

                   c.....

tips: 对于公共操作(如建模板的操作),用迭代器,不使用下标,避免随机访问的可能。

2015-04-15

原文地址:https://www.cnblogs.com/firstcxj/p/4430683.html