• STL标准模板库(Standard Template Library)一周学习总结


    在对STL的学习过程中,我对于容器有了一定的基础认识,容器分为了8个部分+2个操作。

    1. list(列表)
    2. stack(栈-元素先进后出)
    3. queue(队列-元素先进先出)
    4. priority_queue(优先队列,)
    5. deque(双端队列)
    6. vector(向量)
    7. set/multiset/bitset(集合)
    8. map/multimap
    9. sort(排序操作)
    10. reverse /random_shuffle/unique(倒置/生成随机数/删除相邻数取只保留一个)

    简单介绍一下容器所共有的特征即通用函数:

    • .begin()//起始地址
    • .end()//最后一个元素的下一个位置
    • .size()//容器内元素,无符号整型
    • .swap(b)//交换
    • ::iterator//迭代器
    • .empty()//判断是否为空
    • .front()//返回第一个元素
    • .back()//返回最后一个元素

    迭代器

    功能类似于指针,用来访问容器(用来保存元素的数据结构)中的元素,我自己也有点懵懂,类似于指针,它可以将你所用的结构内的元素全部遍历一遍,不会遗漏一个,使用时只要考虑上一个,下一个加上删除操作的使用,!讲解链接可以点看看,看了基本可以明白。

    迭代器基于vector的代码:

    1. for(vector<int>::iterator it=a.begin();it!=a.end();it++)
    2. cout<<*it<<endl;//a表示所用容器名,it代表一个变量可更改

    讲解1

    以list(列表)为模板进行详细介绍

    定义:list是一个双向列表,可以在常数时间内插入和删除,不支持数组表示法和随机访问。使用list时,需要引入头文件#include<list>。

    ps:在写头文件的过程中,可使用#include<bits/stdc++.h>的方法偷懒。此头文件包含一切其它头文件。

    list包含的专用成员函数包括

    • merge(b)//合并两个有序列表,b置为空
    • remove(b)//删除b的所有结点
    • splice(pos,b)//在pos位置插入b
    • reverse()//倒置内容
    • sort()//排序
    • unique()//压缩连续相同元素为一个
    • push_front(x)/push_back(x)//从链表头或尾插入
    • pop_front()/pop_back()//从链表头或尾去除
    • front()/back()//返回头或尾的元素
    • insert(p,t)//在p前插入t
    • erase(p)//擦除p
    • clear()//清空链表

    1:首先我们通过迭代器创建一个列表,代码如下:

    1. #include <iostream>
    2. #include <list>
    3. #include <iterator>
    4. //#include <algorithm>
    5. using namespace std;
    6. void print(list<int> &a)
    7. {
    8. for(list<int>::iterator is=a.begin(); is != a.end(); is++)
    9. cout<<" "<<*is;
    10. }
    11. int main ()
    12. {
    13. list<int>first(3,6);//列表初始化为3个6
    14. print(first);
    15. return 0;
    16. }

    效果图

    1:merge(b)//合并两个有序列表,b置为空:

    1. list<int>q(2,8);
    2. first.merge(q);//此时的q被置为空,将q中的内容连接到first当中
    3. print(first);

    效果图:

    2: remove(b)//删除b的所有结点:

    first.remove(6);//指定删除链表当中所有6的数字

    效果图:

    以下操作暂不附带图片效果自行测试!!!

    3:splice(pos,b)//在pos位置插入b,b的内容可为单个数字,也可为整个列表内容。

    first.splice(first.begin,a);//在first列表的开始位置插入a列表

    4:reverse()//倒置内容

     reverse (first.begin(),first.end());

    5:sort(begin起初, end终止, compare greater<int>(类型))

    //排序

    1. first.sort();//默认升序
    2. sort(first,fisrt+3,bool);//bool为降序功能
    3. bool com(int x,int y)
    4. { return x>y; }

    6:unique()//压缩连续相同元素为一个

    first.unique();

    7:push_front(x)/push_back(x)//从链表头或尾插入

    1. push_front(i);//i为所要插入内容
    2. push_back(i);

    8:pop_front()/pop_back()//从链表头或尾去

    1. first.pop_front();
    2. first.pop_back();

    9:front()/back()//返回头或尾的元素

    1. cout<<first.front()<<endl;
    2. cout<<first.back()<<endl;

    10:insert(p,t)//在p前插入t

    1. int p[5]={55,66,77,88,99};
    2. first.insert (position:first.begin(),first:p,begin:p+3);//在first开始初,插入p数组下标从02的元素
    3. print(first);

    11:erase(p)//擦除p

    对于列表进行erase操作属实比较麻烦,在这里使用string字符串的进行简单的介绍用法

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. int main()
    4. {
    5. string str = "wangjianwen";
    6. cout<<str.erase(0,1)<<endl;//第一个参数为位置,第二个为长度,运行结果为angjianwen
    7. }

    12:clear()//清空链表,简简单单。

    first.clear();

    对于STL容器而言其功能函数大同小异,大家可自行研究研究,只有自身打过代码才能记得更牢固,本节内容到此结束。

  • 相关阅读:
    MySQL修改密码&修改密码策略
    精选 JVM 垃圾回收机制全面分析,聊聊你眼中的 JVM
    Linux_应用篇(17) FrameBuffer 应用编程
    重链剖分链加与极值
    美国夏威夷州禁止某些产品中使用PFAS
    Oracle中数据库的查询(三)
    【iOS】AutoreleasePool自动释放池的实现原理
    【Leetcode】1035. Uncrossed Lines
    【Docker】安装RabbitMQ
    Python 检测网络是否连通
  • 原文地址:https://blog.csdn.net/zjsru_Beginner/article/details/125606753