本文主要是介绍【考研复试上机】算法速记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
排序与查找
结构体排序
vector<ST> vi;
sort(vi.begin(),vi.end(),[](ST t1, ST t2){return t1.first<t2.first;
});
vector排序
vector<int> vi;
sort(vi.begin(),vi.end(),[](int t1, int t2){return t1<t2;
});sort(nums.begin(), nums.end(), greater<int>()); //greater:由大变小
stable_sort()
是对给定区间的元素进行稳定排序,如果两个元素相等,那么排序完成后两个元素的相对位置保持不变
自带的二分
- 返回大于或等于目标值的第一个位置
int pos = lower_bound(vi.begin(),vi.end(),val) - a.begin();
- 返回大于目标值的第一个位置
int pos = upper_bound(vi.begin(),vi.end(),val) - a.begin();
- 若目标值存在则返回true,否则返回false
bool exist = binary_search(vi.begin(),vi.end(),val);
字符串
getline
string s;
getline(cin,s); //可以读入空格和制表符,以回车符作为结束标志
int、string 转换
int化为string
int a=100;
srtring s=to_string(a);
string转换为int
//利用stoi[s to int]
int x = stoi(x);
char 转换为int
int t = s[i] - '0'
字符判断函数
isalpha(c):
字母islower(c):
小写字母isupper(c):
大写字母isdigit(c):
数字isspace(c):
空白字符isblank(c):
空格字符
字符串分割
string s;
getline(cin,s);
istringstream is(s);
string buffer;while(getline(is,buffer,'/')) cout<<buffer<<endl;
查找t是否为s的子串:
s.find(t);//如果t是s的子串则返回首次匹配的位置,否则返回 string::npos 或 -1//如果找到
if(s.find(t)!=-1)s.find(t,pos)//是用来寻找从pos开始(包括pos处字符)t。s.rfind(t) //是从字符串右侧开始匹配
字符串提取
string a=s.substr(pos,len); //返回从pos位开始,长度为len的子串//如果开始位置pos加上计数值len大于string的大小,则substr会调整计数值,只拷贝到string的末尾。
统计某个字符的个数
int cnt = count(s.begin(),s.end(),‘a’)
STL
vector
常用函数
- vector在最后添加元素
vi.push_back(val)
- vector删除最后的元素
vi.pop_back()
- 通过
find
函数来查找某一个值对应的迭代器
vector<int>::iterator it = find(arr.begin(), arr.end(), val);if(it!=arr.end()) return true; //当查找失败时,返回的时arr.end()
- 清空vector中所有的元素
vi.clear()
- vector内的元素逆置
vector<int> vi ={1,2,3,4,5,6};
reverse(vi.begin(),vi.end()); //vi反转后为6,5,4,3,2,1
- vector容器的swap方法
v1.swap(v2)
- vector容器中找到最大元素的位置
maxPosition = max_element(vi.begin(), vi.end());
- 对vector内元素进行去重的方法
// 使用 set 进行去重
set<int> st(vi.begin(), vi.end());
vector<int> viNew(st.begin(), st.end());
- 通过迭代器的位置返回值来获取数组位置下标的方法
//distance,它返回的是两个迭代器之间的距离。//使用这个函数,就能完成迭代器与下标之间的转换:下标 = 当前迭代器位置-容器头部//注:在使用过程中,可以结合begin()和返回的迭代值进行求下标的计算。vector<int>::iterator first = vi.begin();
vector<int>::iterator it = find(arr.begin(), arr.end(), val);
distance(first,it)
set
- set内的元素递增排序
- 自动去重
set容器内元素的访问:
-
访问第一个值【最小值】:
*st.begin()
-
访问最后一个值【最大值】:
*st.rbegin()
//只能通过枚举的方式访问
for(set<int>::iterator it = st.begin();it!=st.end();it++){cout<<*it<<endl;
}
- 将x元素插入set中
st.insert(x)
- 在set中查找value,并返回其迭代器
set<int>::iterator it = st.find(value);
cout<<*it<<endl;cout<<*(st.find(value));
multiset
- 能时刻保证序列中的数是有序的,而且序列中可以存在重复的数
multiset<int> mst;
unordered_set
- 只去重,不排序
unordered_set<int> ust;
map
- map中的键是唯一的
- map会以键从小到大的顺序自动排序
map容器内元素的访问:
-
通过下标访问:
mp['c']
-
通过迭代器访问:
-
map<typename1,typename2>::iterater it; it->first;//访问键 it->second;//访问值
-
-
返回键为key的迭代器
it
map<char,int>::iterator it = mp.find(key);
- 判断map的键是否已经存在了
mp.count(key)//返回值是一个整数,1表示有这个元素,0表示没有这个元素。
- 查找容器中的元素的个数
mp.size();
-
mp.clear();
-
map
对value
进行排序的方法
//先把map装进pair里,然后再放入vector,自定义sort实现排序
vector<pair<int,int>> vi;sort(vi.begin(),vi.end(),[](pair<int,int> p1, pair<int,int> p2){return p1.second>p2.second;
})
multimap
- 一个键可以对应多个值
unordered_map
- 只映射,而不按key排序
queue
- 使用
pop()
和front()
函数前,需要用empty()
函数判断队列是否为空
q.front();//访问队首元素q.back();//访问队尾元素
q.push(x):
将x入队q.pop():
将队首元素出队q.empty():
检测queue是否为空
priority_queue【实质是大根堆/小根堆】
- 队首元素是当前队列中优先级最高的元素
priority_queue<typename> name;
- priority_queue容器内元素的访问:
q.top();//只能访问队首元素,相当于访问堆顶元素
priority_queue常用2函数:
q.push(x):
将x入队q.pop():
将队首元素出队q.empty():
检测优先队列是否为空q.size():
返回优先队列内元素的个数
priority_queue优先级的设置:
priority_queue<int, vector<int>, less<int> > a; //less:减小,从大到小,是大根堆【默认】 priority_queue<int, vector<int>, greater<int> > s; //greater:增大,从小到大,是小根堆
deque[双端队列]
- 在队列尾部添加元素
dq.bush_back()
- 在队列头部添加元素
dq.push_front()
- 删除队列尾部的元素
dq.pop_back()
- 删除队列头部的元素
dq.pop_front()
- 获得头部元素
dq.front()
- 获得队列尾部元素
dq.back()
stack
st.top();//只能访问栈顶元素易错点!在使用st.top()之前,要先判空:st.empty();
st.push(x):
将x入栈st.pop():
将栈顶元素弹出st.empty():
检测栈是否为空st.size():
返回栈内元素的个数
pair
- 可以直接用
==、!=、<
等运算符比较,比较规则:先以first
的大小作为标准,当first
相等时,再去判别second
- 代替二元结构体机器构造函数,节省编码时间
- 作为map的键值对来进行插入:
mp.insert(make_pair("haha",3));
pair<typename1,typename2> name;
在代码中临时构建pair
pair<string,int > ("haha",5);
make_pair("haha",5);
元素访问
pair<int ,int > p;
p.first;
p.second;
algorithm头文件下的常用函数
-
fabs(double x)
:double型变量取绝对值 -
floor(double x)
:double型变量向下取整 -
ceil(double x)
:double型变量向上取整 -
pow(double r, double p)
:返回 r p r^p rp -
sqrt(double x)
:返回double型变量的算术平方根 -
round(double x)
:将double型变量四舍五入 -
next_permutation()
:给出一个序列在全排列中的下一个序列int a[10]={1,2,3}; do{cout<<a[0]<<a[1]<<a[2]<<endl; }while(next_permutation(a,a+3));
-
fill(arr,arr+n,x)
:用于对数组赋予其他的数字
这篇关于【考研复试上机】算法速记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!