高级班期末考试

root 站长 2020-06-28 9:44:21 1

本学期内容

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;

  1. 判空
    s.empty() // 空 !s.empty() // 非空

  2. 清空

while (!s.empty()) s.pop();

  1. 入栈 s.push(x) // 将元素 x 入栈 s

  2. (输出)栈顶元素

(cout << ) s.top();

  1. 出栈 s.pop()

  2. 大小 s.size()

注意:4和5两种操作必须在栈非空的前提下才能进行。

7、队列

queue q;

头文件 queue

  1. 判空
    q.empty() // 空 !q.empty() // 非空

  2. 清空

while (!q.empty()) q.pop();

  1. 入队 q.push(x) // 将元素 x 入队 q

  2. (输出)队首元素 (不删除)

(cout << ) q.front();

  1. 出队(删除队首元素) q.pop()

  2. 大小 q.size()

注意:4和5两种操作必须在队列非空的前提下才能进行。

8、枚举算法(暴力)

枚举法的基本思想是根据提出的问题枚举所有可能状态,并用问题给定的条件检验哪些是需要的,哪些是不需要的。能使命题成立,即为其解。
枚举结构:循环+判断语句。

{{ vote && vote.total.up }}