STL
STL:C++标准模板库(Standard Template Library)
万能头文件 #include<bits/stdc++.h>
时间复杂度
时间复杂度:又称时间复杂性,用来描述程序运行时间与输入数据规模的函数关系
时间复杂度只保留最高项,忽略常数
常见算法的复杂度 : O(n) O(n^2) O(nlogn) O(2^n)
容器
string
动态长度字符串
构造函数: string s1=“1234”
迭代器:string::iterator it=s1.begin()
常用函数:
clear() 清空所有元素
length() 长度
push_back() 在最后添加一个元素
append() 向string的后面追加字符或字符串
find() 在指定范围内查找和目标元素值相等的第一个元素
erase() 删除指定元素
vector
动态数组,内存连续
构造函数:
vector< int >v1 ; vector< string >v2(“1234”);
vector< int >v3(5,2) ; vector< int >v4(v3);
常用函数:push_back()
pop_back() 删除最后一个元素
front() 第一个
back() 最后一个
insert() 插入
erase()
size() 长度
queue
队列,先进先出(FIFO)
构造函数: queue< int >qu;
常用函数:
push() 接到队列末端
pop() 删除队列中最靠前位置的元素
front() back() size()
empty() 判断容器是否为空
stack
堆栈,先进后出(FILO)
构造函数:stack< int >st;
常用函数:push() pop() size() empty()
top() 取出栈顶元素,不会删掉栈里边的元素
set
集合,元素有序排列、不重复
构造函数: set< int >se
常用函数:insert() erase() find() size() clear()
count() 元素计数
lower_bound(x):大于等于x的第一个元素位置,不存在返回end()
upper_bound(x):大于x的第一个元素位置,不存在返回end()
map
字典,key-value键值对,按key有序排列
构造函数: map<int,int>mp
常用函数:erase() find() size() clear() count() lower_bound() upper_bound()
可以像数组一样通过[]访问
list
双向链表,内存不连续
构造函数: list< int >li
常用函数:push_back() push_front() pop_back() pop_front() insert() erase()
函数
sort
vector<int>ve({4,3,5,2,6,1});
sort(ve.begin(),ve.end());
sort(ve.begin(),ve.end(),greater<int>());
bool cmp(int a,int b)
{
if(a%2==b%2) return a<b;
return a%2>b%2;
}
sort(ve.begin(),ve.end(),cmp);
reverse
翻转数组、容器
int x[1005];
reverse(x+1,x+1+n);
vector<int>ve;
reverse(ve.begin(),ve.end());
next_permutation
求全排列中字典序更大的一个序列,不存在更大时返回false
int x[105];
int n=5;
for(int i=1;i<=n;i++)x[i]=i;
do{
for(int i=1;i<=n;i++)printf("%d ",x[i]);
puts("");
}while(next_permutation(x+1,x+1+n));