STL之顺序容器

来源:互联网 发布:网络投资电信诈骗 编辑:程序博客网 时间:2024/05/17 07:54

顺序容器包括以下几类:

1、vector

       可变大小数组,可以理解为广义的动态数组,如:typename *a = new typename [N] 。因为,数组是一组连续的存储单元,所以可以通过数组首地址+index来访问其中元素,也即使支持快速随机访问在尾部之外的位置插入或者删除元素可能会很慢。 这是因为,插入或者删除都需要移动插入/删除位置之后的元素。

·     vector是不支持push_front(),pop_front()操作的,原因可参考为什么vector没有push_front()和pop_front()操作?,但是同样可以实现pop_front(),如下:

vector<int>  a;a.push_back(1);a.push_back(2);a.erase(a.begin()); //返回下个一个元素的迭代器

2、string
    跟vector类似,但是是专门用来保存字符的数组。可快速随机访问。

3、array
    跟内置数组一样,有固定大小,声明的时候需要说明大小、类型。如:array <typename,type_size> a;既然跟内置数组一样,那自然不支持删除或者插入。但可以快速随机访问。

4、deque
    double-end queue(双端队列),就是支持队首和队尾删除插入的队列。支持快速随机访问。

5、list
    双向链表,跟单向链表的区别在于,双向链表可以双向顺序访问。

6、forward_list
    单向链表,只支持单向顺序访问。

顺序容器的共性:
      1)都是线性的、顺序的,这中顺序跟元素的值没关系,跟元素加入容器时的位置相对应。

      2)都能支持大部分操作


顺序容器操作归类:

  1、类型别名

    iterator    迭代器   

    size_tpye      无符号整数类型

    differecne_type      有符号整形,保存两个迭代器直间的距离

    2、构造函数

     C     c;      默认构造函数,构造空容器

     C     c1(c2);      调用拷贝构造函数,构造C1

     C    c(beg,end);      将迭代器指定的范围[beg,end)的元素拷贝到c中,array不支持

     C    c(num,data);      //用Num个data初始化

     C     c{a,b,c...} ;       用初始化列表(C++11)

   3、赋值

     c1 = c2;

     c1 = {a,b,c..};

    swap(a,b) 等价于 a.swap(b);

  4、更改容器内容

    insert();       //插入

    push_back();   //尾部插入

    pop_back();   //尾部删除

    erase();     //删除指定位置的元素

    emplace();   //替换,是erase()和Insert()的结合

    clear();     //清空

     5、获取迭代器

     begin();      //第一个元素的迭代器

     end();   //最后一个元素的下一个位置的迭代器

     rbegin();         redn();    //反向迭代器

   6、获得元素

     at();      //只有使用连续内存的才可以用at,如vector,string,deque,array

     *iterator;   //对有效的迭代器解引用

    back(); //尾部元素

    front();  //第一个元素

   7、容量

    resever();     //预先分配内存,不会减小已有的容量

    capacity();      //获得当前容量

    size();     //当前元素个数

    shrink_to_fit();    //根据size()调整容量

0 0