蓝桥备赛Day1

一、string的函数

  1. substr(起始位置,截取长度)
  2. find方法,返回子字符串起始位置
  3. replace(子串起始位置,子串长度,替换内容),替换内容长度可以和子串长度不一致

练习题目:蓝桥250

要注意的是有空格,所以读取要注意

cpp 复制代码
getline(cins,s1);

二、sort用法

sort(起始地址,结束地址下一位,*比较函数), * 代表可选,范围左闭右开

比较函数

cpp 复制代码
bool cmp(const int &u,const int &v) //也可以直接写 int u,int v
{
    return u > v;
    //返回序列为 : a>b>c
}

int main()
{

    vector<int> v = {1,2,3,4,5,8,6,7};
    sort(v.begin(),v.end(),cmp);
    return 0;
}

//当a相等时比较b

//1.结构体内定义
struct Node{
    int u,v;
    bool operator < (const Node &m) const
    {
        return u==m.u ? v<m.v : u < m.u;
    }
};

//2. 单独的比较函数
struct Node{
    int a;
    int b;
};

bool cmp(int u,int v){
    if(u.a==v.a)
        return u.b < v.b;
    else
        return u.a < v.a;
}

三、最值查找

cpp 复制代码
//min max
min(3,5)
min({1,2,3,4,5})

//min_element,max_element,返回最值的地址

min_element(v.begin(),v.end())
cout<< *min(v.begin(),v.end()) <<endl;


//nth_element(start,k,end)
//进行部分排序,第k个位置以前均比这个位置的数小,后的都比它大,但是只有第k个位置是一定正确的,其他位置上的数字可能是错误的
//可以原来寻找第几大的数字


vector<int> v = {5,3,2,1,6,7,8,0}
nth_element(v.begin(),v.begin()+3,v.end()) //v[3]处于正确位置
for(int i=0;i<n;i++)
cout<<v[i]<<' ';

//结果:3,1,5,7,9,18,10  7一定是正确位置

四、二分法

适用有序列表

整数二分

cpp 复制代码
//计算升序数组中,x第一次出现的位置
int l=0;
int r=1e9;
//终止条件,lr相邻
while(l+1!=r){
    int mid = (l+r)/2;
    if(a[mid]>=x) r=mid;
    else l=mid;
}
cout<<r<<endl;

浮点二分

实数范围内

cpp 复制代码
double l=0,r=1e9,eps=1e-6;
while(r-l>=eps)
{
        double mid = (l+r)/2;
        double mid = (l+r)/2;
        if(f(mid)>=0) r=mid;
        else l=mid;
}

二分答案

cpp 复制代码
bool check(int mid){
    bool res = true;
    return res;
}

int main(){
    int l=0,r=1e9;
    while(l+1 != r){
        int mid = (l+r)/2;
        if(check(mid))  l=mid;
        else r=mid;
    }
    cout<< l << '\n';
}

五、大小写字母

1、islower isupper

返回bool型

2、tolower toupper

tolower/toupper:如果不是大写字母则不进行操作

3、ASCII码

cpp 复制代码
//字符'6'->6

int a = '6'-'0';

//a->A
char ch = 'a';
ch = 'a'-32;

六、全排列

1、next_permutation()

这个函数用于生成当前序列的下一个排列,按照字典序对序列进行重新排列,如果存在下一个排列,将当前序列更改为下一个排列,并返回true,如果已经是最后一个了,返回false

cpp 复制代码
vector<int> nums = {1,2,3}

for(int num:nums)
cout<<num<<' ';

cout<<endl;

while(next_permutation(nums.begin(),nums.end())){
    for(int num:nums)
    cout<<num<<' ';
    cout<<endl;
}

2、prev_permutation()

和next_permutation()函数相反,用于生成上一个排列。

cpp 复制代码
vector<int> nums = {3,2,1};
for(int num:nums)
cout<<num<<' ';
cout<<endl;

while(prev_permutation(nums.begin(),nums.end())){
    for(int num:nums)
    cout<<num<<' ';
    cout<<endl;
}

七、其他库函数

1、memset(ptr,value,num)

ptr:开始地址

value:要设置的值,二进制数,除了0和-1,其他赋值都不等于value

num:要设置的字节数

cpp 复制代码
memset(arr,0,sizeof(arr));

2、swap

cpp 复制代码
    int a=3;
    int b=4;
    swap(a,b);
    cout<<a<<' '<<b; //4 3

3、reverse(begin,end)

范围左闭右开

4、unique(begin,end)

范围左闭右开,unique函数将相邻的重复元素去除,并返回一个指向去重后范围的尾后迭代器。去重后的范围只保留了第一个出现的元素,后续重复的元素都被移除

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a[10]={1,1,2,3,4,3,4,2,4,5};
    int n = unique(a,a+10) -a;
    for(int i=0;i<n;i++)
        cout<<a[i]<<' ';
}


//1 2 3 4 3 4 2 4 5

八、数据类型

1、pair

默认排序是先first字典序,后second字典序

2、vector

  • pop_back、push_back
  • 指定位置插入:insert(place,value),指定位置删除:erase(begin,end)

3、stack

4、queue

5、priority_queue

和普通队列相比,元素按照一定的优先级排序,默认情况下,按照元素从大到小排序

修改比较函数的方法

cpp 复制代码
struct Compare{
    bool operate() (int a,int b){
        return a>b;
    }
};

int main(){
    priority_queue<int,vector<int>,Compare>pq;
    priority_queue<int,vector<int>,greater>pq; //小根堆,最小的是top
}

6、deque双端队列

7、set

相关推荐
Mr_Xuhhh2 小时前
介绍一下ref
开发语言·c++·算法
七点半7702 小时前
linux应用编程部分
数据结构
夏鹏今天学习了吗2 小时前
【LeetCode热题100(99/100)】柱状图中最大的矩形
算法·leetcode·职场和发展
静听山水2 小时前
Redis核心数据结构-Hash
数据结构·redis·哈希算法
啊阿狸不会拉杆2 小时前
《机器学习导论》第 9 章-决策树
人工智能·python·算法·决策树·机器学习·数据挖掘·剪枝
Mr_Xuhhh2 小时前
C++11实现线程池
开发语言·c++·算法
若水不如远方2 小时前
分布式一致性(三):共识的黎明——Quorum 机制与 Basic Paxos
分布式·后端·算法
zhim002 小时前
数据结构笔记(上)(看这亿点就够了)
数据结构
only-qi2 小时前
leetcode24两两交换链表中的节点 快慢指针实现
数据结构·算法·链表