• STL初步


    注:本文主要针对STL中的常用的操作进行总结

    目录:

    1.swap
    2.sort
    3.reverse
    4.min,max(比较简单,暂且略过)
    5._gcd
    6.lower_bound && upper_bound
    7.next_permutation
    8.unique

    1.swap

    (1)目的:交换两个数的值

    (2)手写 代码实现:

    #include<iostream>
    using namespace std;
    inline void swap(int &x,int &y){
    ​	int temp;
    ​	temp=x;
    ​	x=y;
    ​	y=temp;
    }
    int main(){
    ​	int a,b;
    ​	cin>>a>>b;
    ​	swap(a,b);
    ​	cout<<a<<" "<<b;
    ​	return 0;
    
    }
    

    (3)STL使用

    对a,b两个数进行swap操作

    swap(a,b);
    

    注:此处STL相对较慢,而手写代码量小,推荐自行手写

    2.sort

    (1)目的:对数组元素进行排序

    注:非自定义cmp时,默认为从小到大排序

    (2)使用:
    (其实手写快排比这个快。。。。。。)

    sort(start,end,cmp);    //cmp可不填
    //start是排序起始位置,end即排序结束位置,cmp即排序方式  
    //如:sort(a,a+10)
    

    3.reverse

    (1)目的:
    用于反转在[a,b)范围内的数据顺序(其包括a指的元素,但不包括b指的元素);

    (2)使用:

    reverse(start,end);
    /* e.g.
    char s[]="abcdefgh"
    reverse(s,s+strlen(s));
    */
    //结果为:hgfedcba
    //start为起始位置,end为结束位置
    

    4.min,max(略过。。。。。。)

    5.__gcd

    (1)目的:求两个数的最大公因数
    (2) 手写 版代码

    inline int gcd(int x,int y){
        if(y==0) return x;
        else return(gcd(y,x%y));
        //return y==0?x:gcd(y,x%y);
    }
    

    (3)使用:

    __gcd(a,b);    //注:gcd前需要添加两个下划线
    

    这里真的推荐手写,毕竟代码量很小,STL那么慢。。。。。。

    6.lower_bound && upper_bound

    前言:start指起始位置,end指结束位置,k指要查找的数值

    (1)lower_bound()
    使用:lower_bound(start,end,k)

    目的:从start到end-1二分查找** 第一个大于或等于k的数字 ** ,返回该数字的地址,不存在则返回end。用返回的地址减去起始地址start,得到下标。

    (2)upper_bound()
    使用:upper_bound(start,end,k)

    目的:从数组的start位置到end-1位置二分查找** 第一个大于k的数字 **,返回该数字的地址,不存在则返回end。用返回的地址减去起始地址start,得到下标。

    7.next_permutation

    (1)目的:对数组进行全排列
    注:在进行next_permutation操作之前,必须保证要操作的数组是有序的

    (2)使用:

    bool next_permutation(start,end)
    //和sort,reverse等使用方法大致一样
    

    8.unique

    (1)目的:去除容器内相邻的重复的元素(只保留一个)
    注:此处的“去除”指把重复元素移到容器最后。
    通常使用前容器应该要是有序的(不是必要条件)。

    (2)使用:
    要想真正去除重复元素还需要使用erase()函数

    unique(start,end);
    //与sort等使用格式一样,不多赘述
    //Example:unique(a,a+5);
    

    -------------------------------------------------THE END------------------------------------------

  • 相关阅读:
    零基础读懂视频播放器控制原理: ffplay 播放器源代码分析
    JPEG压缩原理与DCT离散余弦变换——有实际的数据演示
    图像压缩编码和解码原理——阐述了DCT变换的实质
    C++与C语言容易忽视的几个差异
    VLC目录结构介绍
    轻量便携流媒体播放器框架设计-2
    轻量便携流媒体播放器框架设计-1
    rtmp和rtsp的区别和适用范围
    vlc源码分析(六) 调用OpenMAX硬解码H.265
    vlc源码分析(五) 流媒体的音视频同步
  • 原文地址:https://www.cnblogs.com/-pwl/p/12373219.html
Copyright © 2020-2023  润新知