本学期内容
1、STL 去重
unique 去重函数,能够去掉数列中相邻重复元素,
语法格式为 int m = unique(a+1,a+1+,cmp)-a-1;
m 为去重后的长度
2、STL 单关键字排序
一般来说是对结构体的某一个属性就行升序或降序的排列。
STL 多关键字排序
结构体有多个属性,多种排序规则来完成排序。
3、中位数
在一行数列的中间位置,偶数的中位数是中间两个数字均可,奇数的
中位数就是最中间的那个数字。
计算公式为: int mid = (1+n)/2;
4、STL 查找函数
共有三个函数,具体用法:
STL 中常用的用于查找的函数有三个:lower_bound、upper_bound、binary_search,一般 lower_bound 最为常用。
lower_bound 用于在一个升序序列中查找某个元素,并返回第一个不小于该元素的元素的迭代器,如果找不到,则返回指向序列中最后一个元素之后的迭代器。
upper_bound 用于在一个升序序列中查找某个元素,并返回第一个大于该元素的元素的迭代器,如果找不到,则返回指向序列中最后一个元素之后的迭代器。
binary_search 用于确定某个元素有没有在一个升序序列中出现过,返回 true 或 false。
三个函数的时间复杂度均为 。
int a[8] = { -9, 5, -1, 2, 7, 1, -2, 2 }, n = 8;
std::sort(a, a + n);
// a = { -9, -2, -1, 1, 2, 2, 5, 7 }
int *p1 = std::lower_bound(a, a + n, 1);
// p1 指向 a 中第 4 个元素 a[3] = 1
int *p2 = std::lower_bound(a, a + n, 2);
// p2 指向 a 中第 5 个元素 a[4] = 2
int *p3 = std::upper_bound(a, a + n, 2);
// p3 指向 a 中第 7 个元素 a[6] = 5
int *p4 = std::lower_bound(a, a + n, 8);
// p4 = a + n,因为数组 a 中没有不小于 8 的元素,此时访问 *p4 会越界
bool flag = std::binary_search(a, a + n, 3);
// flag = false 因为数组 a 中没有 3
5、STl 查找结构体函数
需要在之前的查找函数加上一个参数,第三个参数为要查找的结构体对象,第四个才是排序函数。
int k = lower_bound(a + 1, a + 1 + n, f, cmp) - a - 1;
6、栈
stack s;
-
判空
s.empty() // 空 !s.empty() // 非空 -
清空
while (!s.empty()) s.pop();
-
入栈 s.push(x) // 将元素 x 入栈 s
-
(输出)栈顶元素
(cout << ) s.top();
-
出栈 s.pop()
-
大小 s.size()
注意:4和5两种操作必须在栈非空的前提下才能进行。
7、队列
queue q;
头文件 queue
-
判空
q.empty() // 空 !q.empty() // 非空 -
清空
while (!q.empty()) q.pop();
-
入队 q.push(x) // 将元素 x 入队 q
-
(输出)队首元素 (不删除)
(cout << ) q.front();
-
出队(删除队首元素) q.pop()
-
大小 q.size()
注意:4和5两种操作必须在队列非空的前提下才能进行。
8、枚举算法(暴力)
枚举法的基本思想是根据提出的问题枚举所有可能状态,并用问题给定的条件检验哪些是需要的,哪些是不需要的。能使命题成立,即为其解。
枚举结构:循环+判断语句。