• STL顺序容器总结


    顺序容器总结:

    array:固定大小的数组,支持快速访问,不能添加和删除元素

    vector:动态数组,支持快速访问,但在尾部之外插入或删除元素会很慢

    string:vector相似的容器,用于保存字符

    deque:双向队列,支持快速随机访问,在头尾位置插入元素速度很快

    list:双向链表,支持双向访问,在链表任何位置插入和删除元素都很快

    forward_list:单向链表,只支持单向访问,在链表任何位置插入和删除元素都很快

    1.插入元素(除array外,因为array中数据是固定的):

    push_back(x)

    empalce_back(x)  在容器尾部插入一个元素x,返回void     

    push_front(x)

    empalce_front(x)  在容器头部插入一个元素x,返回void

    insert(p,x)      

    emplace(p,x)     在迭代器p之前插入x,返回指向新添加元素的 迭代器

    insert(p,n,t)   在迭代器p之前插入n个元素,值为t,返回指向第一个新添加元素的迭代器 

    insert(p,b,e)  在迭代器p之前插入迭代器b,e之间的元素,返回指向第一个新添加元素的迭代器

    insert(p,li) 在迭代器p之前插入花括号包围的元素列表,返回指向第一个新添加元素的迭代器

    可以注意到:pushemplace都可以插入到容器中,这两个函数的区别是什么呢?

    当调用push成员函数时,将元素类型的对象传给形参,这些类型被拷贝到容器中,而emplace成员函数是自己在容器内存空间中构造元素。

    比如(idname分别是某一对象构造函数的参数)

    C.emplace_back(“id”,”name”);  正确:它可以直接调用对象的构造函数来实例化元素

    C.push_back(“id”,”name”);   错误:不可以调用构造函数

    2.访问元素

    back() 返回尾部元素的引用

    front() 返回头部元素的引用

    C[n]C.at(n)  返回指定下标的引用,区别是后者如果下标越界则抛出异常

    back()相当于*(--c.end())

    front()相当于*c.begin()

    3.删除元素

    pop_back() 删除尾部元素

    pop_front() 删除头部元素

    erase(p)    删除迭代器p指向的元素,返回被删除元素之后的元素的迭代器

    erase(b,e)   删除迭代器b,e之间的元素,返回被删除元素之后的元素的迭代器

    clear()    删除所有元素

    forward_list容器不使用上面的insertemplaceerase,它使用自己的成员函数:

    insert_after()erase_after():参数和上面的一致

    insertinsert_after的区别:

    insert在迭代器p之前插入元素,并且返回指向第一个插入元素的迭代器

    insert_after在迭代器p之后插入元素,并且返回指向最后一个插入元素的迭代器

    eraseerase_after的区别:

    erase 删除迭代器p指向的元素

    erase_after 删除迭代器p之后的元素,他们都返回一个指向被删除元素之后的元素的迭代器

    4.管理容器容量的成员函数:

    shrink_to_fit()  将容量减少为可以容纳此时元素个数size()的大小

    capacity()   重新分配内存空间时的元素数(意思是此时最多能存多少个元素)

    reserve(n)   重新分配可以容纳n个元素的空间  

    Q1:capacity()size()的区别:

    前者表示此时分配的容量所能容纳的元素个数,不重新分配内存

    后者表示此时容器中的元素数

    Q2:resize(n)reserve(n)的区别:

    前者表示改变容器中元素的数目,如果n小于此时存的元素数,则删除后面的元素,n>此时存的元素数,则添加新元素并初始化(可以使用resize(n,t):新加元素全部初始化为t),该函数不新分配内存

    后者表示重新分配可以容纳n个元素的空间,元素数不变

  • 相关阅读:
    网络攻击与防御 实验1
    java继承 、方法重写、重写toString方法
    递归算法
    加标签的continue用法
    程序员,你应该知道的数据结构之栈
    SpringBoot 内部方法调用,事务不起作用的原因及解决办法
    程序员,你应该知道的数据结构之哈希表
    程序员,你应该知道的数据结构之跳表
    程序员,你应该知道的二分查找算法
    程序员,你应该知道的基础排序算法
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4732945.html
Copyright © 2020-2023  润新知