重要知识点

1.基础知识

  • #include<bits/stdc++.h> //万能头文件

  • #include< algorithm > //包含sort函数

  • 运用sort实现多关键字排序

    bool cmp(Element a,Element b){
    if(a.s1!=b.s1){
    return a.s1>b.s1;//根据关键字s1降序
    else
    //这里可以继续嵌套判断语句实现多关键字排序
    return a.s2<b.s2;//根据关键字s2升序
    }
    sort(list,list+n,cmp);
  • c++输出格式控制

    #include<iomanip>
    setbase(n)//设置整数为n进制(n=8,10,16)
    setprecision(n)//设置浮点数的有效数字为n位
    setw(n)//设置字段宽度为n位
    setfill(n)//设置字符填充,c可以是字符常或字符变量
    setiosflags(ios::fixed)//设置浮点数以固定的小数位数显示
    setiosflags(ios::scientific)//设置浮点数以科学计数法表示
    setiosflags(ios::left)//输出左对齐
    setiosflags(ios::right)//输出右对齐
    setiosflags(ios::skipws)//忽略前导空格
  • 提高cin/cout效率(防止TLE)

    ios::sync_with_stdio(false);//关闭与stdio的兼容
    cin.tie(0);//cin与cout解除绑定
    cout.tie(0);

2. STL相关

  • 双端队列 deque

    #include<deque>//双向队列
    
    //初始化
    deque<int> a; // 定义一个int类型的双端队列a
    deque<int> a(10); // 定义一个int类型的双端队列a,并设置初始大小为10
    deque<int> a(10, 1); // 定义一个int类型的双端队列a,并设置初始大小为10且初始值都为1
    deque<int> b(a); // 定义并用双端队列a初始化双端队列b
    deque<int> b(a.begin(), a.begin()+3); // 将双端队列a中从第0个到第2个(共3个)作为双端队列b的初始值 //容器属性
    deq.size();//容器大小
    deq.empty();//容器判空
    deq.max_size();//容器最大容量
    deq.resize();//更改容器大小 //插入
    deq.push_front(const T& x);//头部添加元素
    deq.push_back(const T& x);//末尾添加元素
    deq.insert(iterator it, const T& x);//任意位置插入一个元素
    deq.insert(iterator it, int n, const T& x);//任意位置插入 n 个相同元素
    deq.insert(iterator it, iterator first, iterator last);
    //插入另一个向量的 [forst,last] 间的数据 //删除
    deq.pop_front();//头部删除元素
    deq.pop_back();//末尾删除元素
    deq.erase(iterator it);//任意位置删除一个元素
    deq.erase(iterator first, iterator last);//删除 [first,last] 之间的元素
    deq.clear();//清空所有元素 //访问
    deq[1]; //下标访问(并不会检查是否越界)
    deq.at(1); //at方法访问(以上两者的区别就是 at 会检查是否越界,是则抛出 out of range 异常)
    deq.front();//访问第一个元素
    deq.back();//访问最后一个元素
  • 队列queue

    #include<queue> //队列
    q.push(x);//x入队尾
    q.pop();//弹出队首的第一个元素(注意 并不会返回被弹出元素的值)
    q.front();//访问队首元素
    q.back();//访问队尾元素
    q.empty();//判断队列空(当队列空时,返回true)
    q.size();//返回队列内元素的大小
  • 栈stack

    #include<stack>//栈
    t.empty();//如果栈为空返回true,否则返回false
    t.size();//返回栈内元素的大小
    t.pop();//从栈顶弹出一个成员
    t.push();//向栈内压入一个成员
    t.top()//返回栈顶,但不删除成员
  • 求区间第k小nth_element();

    #include<algorithm>
    //求区间第k小(从1开始)
    nth_element(a,a+k-1,a+n);//把下标k-1放在了正确的位置(此时a[k-1]为第k小) //求区间第k大
    //(1)为区间第n-k+1小时,即为区间第k大
    nth_element(a,a+n-k,a+n);
    //a[n-k]为区间第k大 //(2)把函数定义为求区间第k大
    //a.自定义
    bool cmp(int a, int b){
    return a > b;
    }
    nth_element(c,c+k-1,c+n,cmp);
    //b.用greater
    nth_element(c,c+k-1,c+n,greater<int>());
    //a[k-1]为区间第k大
  • 可重集合multiset与不可重复set

    #include<set>
    //set中元素不可重复,multiset元素可重复
    multiset<int> t;//定义
    set<int> t;
    //常用操作
    t.insert(k);//插入元素k
    t.count(k);//判断元素k在容器内出现的次数(为0表示不在容器中)
    t.erase(k);//删除容器中所有元素k,若不存在则删除无效
    t.clear();// 清空容器
    t.size();//返回容器现有元素个数
    t.empty();//判断容器是否为空 //想遍历set里的元素或进行进一步修改,必须定义对应迭代器,以下三种定义方法(迭代器类似于指针)
    multiset<int>::iterator it;//定义正向迭代器
    multiset<int>::reverse_iterator rit;//定义反向迭代器
    auto it = t.begin();//因为t.begin()返回正向迭代器,所以it自动被定义为正向迭代器,可适应其他所有操作
    for(multiset<int>::iterator it=q.begin();it!=q.end();it++){} //以下需要迭代器的操作:
    t.begin();//返回multiset中第一个元素,类型为正向迭代器
    t.rbegin();//返回multiset中最后一个元素,类型为反向迭代器
    t.end();//返回multiset中最后一个元素,类型为正向迭代器
    t.rend();//返回multiset中第一个元素,类型为反向迭代器 t.find(k);//寻找k,若找到返回第一个k对应的迭代器,否则返回end(),所以可以用t.erase(t.find(k))的方法来删除容器中其中一个等于k的元素
    t.insert(a, b);//插入指针[a, b)之间的元素
    t.erase(it);//删除迭代器it对应的元素
    t.erase(l, r);//删除迭代器[l, r)之间的元素
    lower_bound(k);// 返回第一个大于等于k的元素的迭代器
    upper_bound(k);//返回第一个大于k元素的迭代器
  • vector

    #include<vector>
    //vector是一个能够存放任意类型的动态数组
    vector<int> list;
    vector<int> num[100005];
    list.push_back(a); //把a放进vector里
    list[i].push_back(a); list.empty(); //判断a是否为空,空则返回ture,不空则返回false
    list.size(); //返回a中元素的个数
    list.erase(i);//删除迭代器指向的元素
    for(vector<int>::iterator it=b.begin();it!=b.end();it++){}
    //迭代器遍历
    list.back(); //返回a的最后一个元素
    list.front(); //返回a的第一个元素
  • map

    #include<map>//map是根据关键字(第一个值)升序排列
    map<int,string> person;//定义map
    //插入数据
    //(1)以数组形式插入
    person[2]="TOM";
    person[4]="Jack";
    //(2)使用pair插入
    person.insert(pair < int,string > (1,"Jim"));
    //(3)使用value_type插入
    person.insert(map<int,std::string>::value_type(2, "Tom")); //遍历
    //(1)迭代器遍历
    map<int,string>::iterator it;//正向迭代器
    map<int,string>::reverse_iterator iter;//反向迭代器
    for(it=person.begin();it!=person.end();it++){
    cout<<it->first<<' '<<it->second<<endl;
    it++;
    }
    //删除
    iterator erase(iterator it);//通过一个条目对象删除
    iterator erase(iterator first,iterator last);//删除一个范围
    size_type erase(const Key&key); //通过关键字删除
    clear();//就相当于enumMap.erase(enumMap.begin(),enumMap.end());
    //
  • 优先队列priority_queue

    #include<queue>
    priority_queue<int> as;//对于基础类型 默认是大根堆
    priority_queue <int,vector<int>,greater<int> > q;//小根堆
    priority_queue <int,vector<int>,less<int> >q;//大根堆
    //自定义比较(重写仿函数)
    struct cmp{
    bool operator()(Node n1, Node n2){
    if (n1.a == n2.a) return n1.b > n2.b;
    return n1.a > n1.b;
    }//所以大于号是小顶堆 小于号是大顶堆
    };
    priority_queue<Node, vector<Node>, cmp> t;
    //其余操作与队列基本一致

数据结构知识总结(STL整理)的更多相关文章

  1. C++STL整理

    STL整理 vector #include<bits/stdc++.h> #define go(i,a,b) for(int i=a;i<b;i++) using namespace ...

  2. mysql基础知识语法汇总整理(二)

    mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...

  3. mysql基础知识语法汇总整理(一)

    mysql基础知识语法汇总整理(二)   连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...

  4. STL整理

    sort 升序排列: iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素. iterator up ...

  5. STL整理之set

    转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识:    C++.C语言入门 Set是什么 Set是C++STL中提供的容器,set是数学上的集合——具有唯一性,即每个元素 ...

  6. C++基础知识:STL简介

    1.标准模板库STL ― STL , 即 : Standard Template Library , 是 C++的一部分― STL是常用数据结构和算法的集合― STL的目标是标准化组件 , 提高开发效 ...

  7. C++ STL 整理

    一.一般介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library ...

  8. MVC 使用cshtml的一些基础知识-和相关整理

    首先在认识cshtml之前,先要了解一下Razor视图引擎 如果对此有疑问的话可以借鉴 博客园博文:http://kb.cnblogs.com/page/96883/ 或 博客博文:http://ww ...

  9. STL整理之map

    转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识:    C++.C语言入门 Map是什么 Map是从键(key)到值(value)的映射,其内部实现是一棵以key为关键码 ...

随机推荐

  1. 关于Servlet

    Servlet与CGI CGI(Common Gateway Interface),早期的Web服务器技术.执行模式:将服务端的资源基于进程运行. Servlet:运行模式改为单进程多线程的形式,利用 ...

  2. NOIP 模拟八 考试总结

    T1星际旅行 给出n个点,m条边,求满足一条路径使得m-2条边经过2次,2条边经过1次的方案数.并且题目中给出有自环. 看到题面我以为是个计数DP,可能是计数题做多了吧哈哈.其实仔细朝图的方向想一想就 ...

  3. xLua中C#调用Lua

    C#调用Lua 一.前提 这里使用的是XLua框架,需要提前配置xlua,设置加载器路径: 可以参考之前的Blog:<xlua入门基础>: 二.C#调用Lua全局变量 lua中所有的全局变 ...

  4. vue常见的三种组件通讯—props,$refs,this.$emit

    一.父组件--->子组件 props 1.特点:props是用于父组件向子组件传递数据信息(props是单向绑定的,即只能父组件向子组件传递,不能反向 2.用法:父组件中使用子组件时,绑定要传递 ...

  5. 036—环境变量path

    day04 课堂笔记 1.开发第一个java程序:HelloWorld 1.1.程序写完以后,一定要ctrl+s进行保存 源代码若修改,需重新进行编译 1.2.编译阶段 怎么编译?使用什么命令?这个命 ...

  6. Stream中的Pipeline理解

    使用Stream已经快3年了,但是从未真正深入研究过Stream的底层实现. 今天开始把最近学到的Stream原理记录一下. 本篇文章简单描述一下自己对pipeline的理解. 基于下面一段代码: p ...

  7. Beta阶段性总结

    1.题士开发总结 2.反思 2.1 Issue管理 从0522敲定各个功能的API后,团队成员及时沟通,积极开发,但由于开发过程没能有效体现在issue上(如未能及时在issue上形成记录,功能开发完 ...

  8. Asp.CAore往Vue前端传application/octet-stream类型文件流

    题外话:当传递文件流时要确定文件流的类型,但也有例外就是application/octet-stream类型,主要是只用来下载的类型,这个类型简单理解意思就是通用类型类似 var .object.ar ...

  9. 2021.7.15考试总结[NOIP模拟16]

    ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...

  10. 示波器分析I2C时序波形图

    对于嵌入式开发的朋友来说,I2C协议实在是再熟悉不过了,有太多的器件,采用的都是通过I2C来进行相应的设置.今天,我们就随便聊聊这个I2C协议. I2C协议中最重要的一点是I2C地址.这个地址有7位和 ...