常用库函数

Sort

  • algorithm bits/stdc++.h
  • O(nlogn)
  • 左闭右开
  • 默认用小于
  • 迭代器:sort(v.begin(),v.end(),函数名)
  • 自定义比较函数:
  • lambda表达式:
sort(v.begin(),v.end(),[](const int &u,const int &v){
	return u>v;
})
  • 结构体重载
struct Node
{
	int u,v;
	bool operator < (const Node &m)const
	{
		return u == m.u ? v<m.v : u < m.u;
	}
}
  • 排序
#include
using namespace std;
const int N = 5e5 +3;
int a[N];

int main()
{
	int	n;
	cin>>n;
	for(int i = 1;i<=n;++i)cin>>a[i];
	for(int i = 1;i<=n;++i+cout<<" \n"[i==n]);
	for(int i = n;i>=1;--i)cout<<" \n"[i==1]);
	return 0;
}

最值查找

  • min(a,b) , max({1,2,3,4)
  • min_element(st,ed);
  • using ll = long long;
vector<int> v = {5,1,3,9,11};
cout<<*max_element(v.begin(),v.end())<<'\n';
  • nth_element(st,k,ed):找到数字中第几大的元素
  • nth_element(v.begin(),v.vegin()+3,v.end()):

二分查找

  • 只能对数组或容器,并且是单调的
  • binary_search
#include
using namespace std;
int main(){
    vector<int> numbers = {1,3,5,7,9};
    int target = 5;
    bool found = binary_search(numbers.begin(), numbers.end(), target);
    if(found){
        cout<<"Target element " << target << " found."<<endl;
    }else{
        cout<<"Target element " <<target <<" not found."<<endl;
    }
    return 0;
}

  • lower_bound 第一个≥ x 元素的地址,upper_bound 第一个> x 元素的地址,地址-首地址 = 下标
#include
using namespace std;
int main(){
    vector<int> v = {5,1,7,3,10,18,9};
    sort(v.begin(),v.end());
    for(auto &i:v)cout<<i<<' ';
    cout<<'\n';
    cout<<lower_bound(v.begin(), v.end(), 8) - v.begin()<<'\n';
    return 0;
}

大小写转换

  • islower/isupper
  • tolower/toupper
  • ascii 码

全排列

  • next_permutation(st,ed):返回当前序列按字典序的下一个排列
  • prev_permutation()

其他库函数

  • memset(void* ptr,int value,size_t num):给每个字节赋值
  • 0和-1 是正确的,1 不能赋值
  • swap(T &a,T &b)
  • reverse()
  • unique():去除相邻重复元素,返回去重后范围尾后迭代器 O(n)

你可能感兴趣的:(算法,算法)