zoukankan      html  css  js  c++  java
  • 第9章 顺序容器

    9.1顺序容器概述

    vector       大小可变的数组。支持快速随机访问,在非尾部插入或者删除元素较慢。

    deque       双端队列。支持快速随机访问,在头尾插入删除速度很快。

    list             双向链表,只支持双向顺序访问。在当前位置插入删除操作速度很快。

    forward_list     单向链表。只支持单向顺序访问。在当前位置插入删除操作速度很快。

    array         固定大小数组。支持快速随机访问,不能添加删除元素。

    string        与vector类似的容器,专门用于保存字符。

    容器操作

    类型别名

    iterator    此容器类型的迭代器类型

    const_iterator

    size_type

    difference_type        元素距离类型

    value_type       元素类型

    reference                   元素的左值类型,同value_type &

    const_reference

    构造函数

    C c;

    C c1(c2);//使用c2所有元素的拷贝进c1

    C c(b, e);//将迭代器b到e之间的元素拷贝到c(不支持array)。

    C c{a, b, c, d};//列表初始化

    赋值与swap、assign

    c1 = c2;//将c1中的元素替换成c2中的元素

    c1 = {a, b, c, d};//替换为列表

    a.swap(b);//交换a、b的元素,元素本身并未交换,只是交换了内部的数据结构,所以很快

    swap(a, b);//swap之前所有的迭代器指针都指向原来的位置,不属于交换后的容器了。String除外,array除外,交换后会失效。

    c.sign(b, e);//将另一个容器中从b到e中的元素替换到c

    c.assign( il );//将初始值列表元素替换到c

    c.assign(n, t);//n个t替换到c中

    大小

    c.size();//不支持forward_list

    c.max_size();//c可保存的最大元素数目

    c.empty();//是否为空

    添加删除(不适用array

    c.insert(args);

    c.emplace(inits);//其中写的是构造函数列表的参数,空则使用默认构造函数。

    //通常,需要创建对象,然后将对象拷贝到容器中。emplace直接在容器中构造对象。

    c.erase(args);//删除

    c.clear();

     

    关系运算

    ==、!=

    <、<=、>、>=                   无序容器不支持

    获取迭代器

    c.begin(), c.end()

    c.cbegin(), c.cend()

    反向容器的额外成员,不支持forword_list

    reverse_iterator      逆序迭代器,

    const_reverse_iterator   逆序迭代器

    c.rbegin(), c.rend()  逆序迭代器,begin得到最后一个元素,rend为首元素之前

    c.crbegin(), c.crend()

    9.3 顺序容器操作

    添加元素

    push_back(t)                                在尾部插入值

             emplace_back(args)         在尾部插入有参数初始化的元素

    push_front

             emplace_front

    insert(p_iterator,t)

             emplace(p_iterator,args)

    insert(p_iterator,n_count,t)

    insert(p_iterator,beg_iterator, end_iterator)

    insert(p_iterator,{…})

    向vector、string、deque插入元素,会使所有指向容器的迭代器、引用、指针失效。

    Insert会返回当前插入位置,由于之前使用的当前位置可能会失效,所以再次向此位置插入时,已使用insert返回的当前位置。

    访问元素

    front                   返回容器的首元素的引用

    back                   返回容器的尾元素的引用

    在使用容器的时候,如果需要改变容器内的元素值,一定要使用引用。

    删除元素

    pop_back          删除尾元素

    pop_front

    erase(p_iterator)

    erase(beg_iterator,end_iterator)

    clear

    forward_list

    由于是单向链表,所有的操作只能在当前位置之后。

    befor_begin     首元素之前

    cbefor_begin

    insert_after

    emplace_after

    erase_after

    改变容器大小

    resize(n_size);注意可能会删除后部元素,或使用默认初始化将元素添加到后部

    resize(n_size, t);如果增大了容器,在后边全部填充t

    capacity和size

    capacity,能容纳多少元素,而不需要从新分配内存

    size,当前容纳了多少元素

    shrink_to_fit,将内存退回到size的大小

    reserve,预分配capacity

    额外的string操作

    substr

    append

    replace

    find

    compare

    数值转换

    容器适配器

    stack  :size pop top push empty这几个方法

    queue   :size pop back front push empty这几个方法

    priority_queue

    适配器使得某种事物的行为,看起来更像另外一种事物。

    对于给定的适配器,可以使用的容器是有限制的。

    1. 适配器要求能够增删元素,所以不能使用array容器
    2. stack只要求push_back、pop_back和back操作,可以使用array和forward_list之外的任何容器
    3. queue要求back、push_back、front和push_front因此,可以使用list或deque,不能vector
    4. priority_queue除了front、push_back、pop_back还要求随机访问的能力,因此可以构造与vector或者deque之上,但不能用list
  • 相关阅读:
    【转】svn冲突问题详解 SVN版本冲突解决详解
    【转】Mysql解决The total number of locks exceeds the lock table size错误
    【转】iOS中修改AVPlayer的请求头信息
    【转】AJAX请求和普通HTTP请求区别
    【转】怎么给javascript + div编辑框光标位置插入表情文字等?
    【转】iOS开发笔记--识别单击还是双击
    【转】Android hdpi ldpi mdpi xhdpi xxhdpi适配详解
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
  • 原文地址:https://www.cnblogs.com/qiusuo/p/4542596.html
Copyright © 2011-2022 走看看