zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    每日总结
    每日总结
    团队冲刺阶段二(10)
    团队冲刺阶段二(9)
    团队冲刺阶段二(8)
    团队冲刺阶段二(7)
    团队冲刺阶段二(6)
    团队冲刺阶段二(5)
    团队冲刺阶段二(4)
    根据Panda Global了解,中央政治局第十八次集体学习中指出“区块链技术的集成应用在新的技术革新和产业变革中起着重要作用”
  • 原文地址:https://www.cnblogs.com/firstcxj/p/4430683.html
Copyright © 2011-2022 走看看