蓝桥杯备赛学习要点梳理(3)——C++STL库-常用容器(上)

1  向量  vector

连续的顺序的储存结构(与数组类似),但是长度可变

作用用法示例
构造vector<类型>  vec( 长度 , [初值] )vector<int>  vec( 10 , 1 );
尾部添加元素.push_back(元素)

vec.push_back(5);

删除尾部元素.pop_back()vec.pop_back();
访问元素vector[下标]vec[3];
查看大小.size()vec.size();
清空容器.clear()vec.clear();
判断是否有元素(判空).empty()vec.empty();
改变长度.resize( 新长度, [默认值] )vec.resize( 8 , 0 )

补充:

        1.构造二维vector:

    vector<vector<int>>  vec( 10 , vector<int> ( 8 , 1 ))        
    //(构造了一个10行8列,初值为1的二维vector)

        2.可使用.insert()函数在指定位置插入元素,传入参数为插入起始地址(迭代器)和插入的元素(可以是元组,vector等)

        3.可使用.erase()函数删除指定位置(或范围)的元素,传入参数可以是某个地址(或迭代器)或地址的范围(迭代器的范围)

        4 .empty()返回值为bool类型,如果vector为空返回true,否则为false

        5 .resize修改长度时,如果为缩短,则删除后面多余的元素,如果为扩大,新元素为默认值,旧元素不变

        6.vector能够很好的替换掉普通数组(除了有些情况对时间复杂度要求特别苛刻),可减少内存的浪费,此外,其数据储存在堆空间,不会爆栈

注意事项

        1.若vector的长度已经确定,应在构造时就指定其长度,而不是慢慢.push_back(),因为给vector重新分配内存仍有时间开销

        2.使用.size()时,其返回值类型为size_t,可能会导致数据溢出(如32位编译器下,该类型取值范围为[ 0 , 2^32 )   )

2  栈 stack

        通过二次封装双端队列 (deque) 容器,实现先进后出的栈数据结构,像一个桶一样

作用用法示例
构造stack<类型> stkstack<int> stk;
进栈.push()

stk.push();

出栈.pop()

stk.pop();

使用栈顶元素.top()int  m = stk.top();
查看大小/清空/判空(与vector类似)(与vector类似)

补充及注意事项

        1.vector也可以当栈使用,使用vector的.back()访问其尾部元素,相当于使用栈顶元素,.push_back()相当于进栈,.pop_back()相当于出栈

        2.stack不可访问栈内元素,只能访问栈顶

3  队列  queue

        通过二次封装双端队列 (deque) 容器,实现先进先出的队列数据结构,类似于水管

作用用法示例
构造queue<类型>  quequeue<int>  que;
进队.push(元素)

que.push(3);

出队.pop()

que.pop();

使用队首元素.front()int  m = que.front();
使用队尾元素.back()int  n = que.back();
查看大小/清空/判空

注意事项

        queue也不可访问队列中的元素

4  优先队列  priority_queue

        提供常数时间的最大(或最小)元素查找,对数时间的插入与提取,底层原理是二叉堆动画解释二叉堆icon-default.png?t=N7T8https://www.bilibili.com/video/BV11t4y1r79L/

 构造

        priority_queue<类型,容器,比较器>  pque

        类型:储存的数据类型

        容器:储存数据所用的底层容器,默认为vector<类型>

        比较器:比较大小使用的比较器,默认为less<类型>,大顶堆(其堆顶为最大的那个元素),可改为greater<类型>,变成小顶堆(其堆顶为最小的那个元素)

作用用法示例
进堆.push(元素)

pque.push( 2 );

出堆.pop()

pque.pop();

访问堆顶元素.top()int  m = pque.top();
查看大小/判空(无清空)

适用及注意事项

        1.可以持续维护元素的有序性:每次向堆中插入大小不定的元素,或者取出堆中大小最大/最小的元素,如果元素数量为n,插入元素数量为k,则总的时间复杂度为O(k*log n),相比插入一个vector后再进行快排的方法(时间复杂度为k*n*log n)更加快速

        2.只可访问堆顶元素,无法读取其他元素

        3.堆中所有元素不可修改,除了堆顶元素可采用 先出堆进行修改再入堆 的操作,但其修改后不一定仍为堆顶元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大只的辰阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值