林老师 · 客观题题库 · 专题 20 STL 与常用容器 · 复习强化

专题 20 STL 与常用容器 · 复习强化

100 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-专题20STL与常用容器-复习强化
题目总数101 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 17 大部分,合计 101 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

STL 总览与常用函数

8 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

STL 指的是( )。

(1 分)
第 2 题 A2 未作答

竞赛代码常写 #include <bits/stdc++.h>,它的作用是( )。

(1 分)
第 3 题 A3 未作答

min(3, 7)max(3, 7) 的值分别是( )。

(1 分)
第 4 题 A4 未作答

min(3, 7.5) 这样的调用(int 与 double 混合)在标准 C++ 中( )。

(1 分)
第 5 题 A5 未作答

int a = 3, b = 7; swap(a, b); 执行后 ab 的值是( )。

(1 分)
第 6 题 A6 未作答

数组 int a[4] = {5, 2, 9, 1}; 执行 sort(a, a + 4); 后,数组内容是( )。

(1 分)
第 7 题 A7 未作答

sort(a, a + n) 排序的范围是( )。

(1 分)
第 8 题 A8 未作答

不带第三个参数的 sort 默认按( )排列。

(1 分)

sort 复习与进阶

7 QUESTIONS · 2 POINTS EACH
第 9 题 B1 未作答

要把 int 数组按从大到小排序,最简洁的 STL 写法是( )。

(1 分)
第 10 题 B2 未作答

int a[5] = {7, 3, 9, 1, 5}; 执行 sort(a + 1, a + 4); 后数组是( )。

(1 分)
第 11 题 B3 未作答

按「个位数从小到大」给数组排序,sort 的第三个参数应传( )。

(1 分)
第 12 题 B4 未作答

字符串数组 {"banana", "apple", "cherry"} 执行默认 sort 后是( )。

(1 分)
第 13 题 B5 未作答

STL sortnn 个元素排序的平均时间复杂度是( )。

(1 分)
第 14 题 B6 未作答

「排序后元素带着原下标一起移动」要靠( )实现。

(1 分)
第 15 题 B7 未作答

关于 STL sort 的稳定性(相等元素的相对顺序),正确的是( )。

(1 分)

vector 基础

8 QUESTIONS · 2 POINTS EACH
第 16 题 C1 未作答

vector<int> v; 尾部添加元素 33 的写法是( )。

(1 分)
第 17 题 C2 未作答

vector 判断「当前没有任何元素」,标准写法是( )。

(1 分)
第 18 题 C3 未作答

vector 的下标访问 v[i]( )。

(1 分)
第 19 题 C4 未作答

v.pop_back() 的作用是( )。

(1 分)
第 20 题 C5 未作答

v.clear() 执行后( )。

(1 分)
第 21 题 C6 未作答

vector 区别于定长数组的核心特性是( )。

(1 分)
第 22 题 C7 未作答

vector<int> v(n, 5); 的含义是( )。

(1 分)
第 23 题 C8 未作答

vector 与定长数组相比,说法正确的是( )。

(1 分)

vector 进阶

6 QUESTIONS · 2 POINTS EACH
第 24 题 D1 未作答

vector<int> v = {2, 5, 8};v.front()v.back() 的值是( )。

(1 分)
第 25 题 D2 未作答

vector<vector<int>> g(n); 常用来( )。

(1 分)
第 26 题 D3 未作答

vector<Node> v; 存自定义结构体并 push_back(t),关于这种用法( )。

(1 分)
第 27 题 D4 未作答

函数要修改调用方的 vector 内容,形参应写成( )。

(1 分)
第 28 题 D5 未作答

无向图加边 (u, v) 用 vector 边表的标准动作是( )。

(1 分)
第 29 题 D6 未作答

遍历 vector<int> v 求和,初赛最常用的写法是( )。

(1 分)

stack 接口

7 QUESTIONS · 2 POINTS EACH
第 30 题 E1 未作答

定义整型栈并压入 55 的写法是( )。

(1 分)
第 31 题 E2 未作答

st.top() 的作用是( )。

(1 分)
第 32 题 E3 未作答

st.pop() 的行为是( )。

(1 分)
第 33 题 E4 未作答

弹出循环 while (!st.empty()) { ... st.pop(); }empty() 的作用是( )。

(1 分)
第 34 题 E5 未作答

st.size() 返回( )。

(1 分)
第 35 题 E6 未作答

依次 push 1,2,31, 2, 3 后连续 pop 两次,弹出的元素依次是( )。

(1 分)
第 36 题 E7 未作答

要按「从顶到底」的顺序处理栈中所有元素,标准做法是( )。

(1 分)

queue 接口

7 QUESTIONS · 2 POINTS EACH
第 37 题 F1 未作答

定义整型队列并把 44 加入队尾的写法是( )。

(1 分)
第 38 题 F2 未作答

queue<int> q 依次入队 1,2,31, 2, 3 后,q.front()q.back() 是( )。

(1 分)
第 39 题 F3 未作答

队列的 pop() 从哪一端删除元素( )。

(1 分)
第 40 题 F4 未作答

队列「先进先出」的进出规则是( )。

(1 分)
第 41 题 F5 未作答

要拿到队头元素的值并让它出队,正确顺序是( )。

(1 分)
第 42 题 F6 未作答

队列当前元素个数用( )获取。

(1 分)
第 43 题 F7 未作答

按出队顺序处理队列全部元素并清空它,标准循环是( )。

(1 分)

list 链表容器

6 QUESTIONS · 2 POINTS EACH
第 44 题 G1 未作答

list<int> L; 要在头部与尾部各插一个元素,正确的两个接口是( )。

(1 分)
第 45 题 G2 未作答

list<int> L 依次 push_back(2)push_front(1)push_back(3) 后,L.front()L.back() 是( )。

(1 分)
第 46 题 G3 未作答

L.pop_front()L.pop_back() 分别删除( )。

(1 分)
第 47 题 G4 未作答

list 与 vector 最关键的对比是( )。

(1 分)
第 48 题 G5 未作答

L[2]list 而言( )。

(1 分)
第 49 题 G6 未作答

C++11 起遍历 list<int> L 最简洁的写法是( )。

(1 分)

容器选择与综合

6 QUESTIONS · 2 POINTS EACH
第 50 题 H1 未作答

「需要下标随机访问、且只在尾部增删」应选( )。

(1 分)
第 51 题 H2 未作答

下列最适合用 stack 的场景是( )。

(1 分)
第 52 题 H3 未作答

下列最适合用 queue 的场景是( )。

(1 分)
第 53 题 H4 未作答

下列最适合用 vector 的场景是( )。

(1 分)
第 54 题 H5 未作答

下列最适合用 list 的场景是( )。

(1 分)
第 55 题 H6 未作答

初赛中 STL 容器与手写数组实现的取舍,正确的态度是( )。

(1 分)

函数代码

6 QUESTIONS · 2 POINTS EACH
第 56 题 I1 未作答

01int a = 3, b = 7;
02cout << min(a, b) << " " << max(a, b);

输出是( )。

(1 分)
第 57 题 I2 未作答

01int a = 3, b = 7, c = 5;
02cout << min(a, max(b, c));

输出是( )。

(1 分)
第 58 题 I3 未作答

01int a = 3, b = 7;
02swap(a, b);
03cout << a << " " << b;

输出是( )。

(1 分)
第 59 题 I4 未作答

01int a[] = {5, 2, 9, 1};
02sort(a, a + 4);
03for (int i = 0; i < 4; i++) cout << a[i];

输出是( )。

(1 分)
第 60 题 I5 未作答

01int a[] = {5, 2, 9, 1};
02sort(a, a + 4, greater<int>());
03for (int i = 0; i < 4; i++) cout << a[i];

输出是( )。

(1 分)
第 61 题 I6 未作答

01int a[] = {7, 3, 9, 1, 5};
02sort(a + 1, a + 4);
03for (int i = 0; i < 5; i++) cout << a[i];

输出是( )。

(1 分)

vector 代码

7 QUESTIONS · 2 POINTS EACH
第 62 题 J1 未作答

01vector<int> v;
02v.push_back(3); v.push_back(1); v.push_back(4);
03for (int i = 0; i < (int)v.size(); i++) cout << v[i];
04cout << " " << v.size();

输出是( )。

(1 分)
第 63 题 J2 未作答

01vector<int> v;
02v.push_back(3); v.push_back(1); v.push_back(4);
03v.pop_back();
04for (int i = 0; i < (int)v.size(); i++) cout << v[i];
05cout << " " << v.size();

输出是( )。

(1 分)
第 64 题 J3 未作答

01vector<int> v;
02v.push_back(3); v.push_back(1);
03v[0] = 9;
04for (int i = 0; i < (int)v.size(); i++) cout << v[i];

输出是( )。

(1 分)
第 65 题 J4 未作答

01vector<int> v;
02v.push_back(9); v.push_back(1);
03int s = 0;
04for (int i = 0; i < (int)v.size(); i++) s += v[i];
05cout << s;

输出是( )。

(1 分)
第 66 题 J5 未作答

01vector<int> v;
02v.push_back(9); v.push_back(1);
03for (int i = (int)v.size() - 1; i >= 0; i--) cout << v[i];

输出是( )。

(1 分)
第 67 题 J6 未作答

01vector<int> v;
02v.push_back(9); v.push_back(1);
03v.push_back(7); v.push_back(2);
04sort(v.begin(), v.end());
05for (int x : v) cout << x;

输出是( )。

(1 分)
第 68 题 J7 未作答

01vector<int> v;
02for (int x : {1, 2, 7, 9}) v.push_back(x);
03while (!v.empty()) { cout << v.back(); v.pop_back(); }

输出是( )。

(1 分)
拾壹

stack 代码

6 QUESTIONS · 2 POINTS EACH
第 69 题 K1 未作答

01stack<int> st;
02st.push(1); st.push(2); st.push(3);
03cout << st.top();

输出是( )。

(1 分)
第 70 题 K2 未作答

01stack<char> sc;
02string s = "abcde";
03for (char c : s) sc.push(c);
04string r;
05while (!sc.empty()) { r += sc.top(); sc.pop(); }
06cout << r;

输出是( )。

(1 分)
第 71 题 K3 未作答

01string t = "{[()]}";
02stack<char> st;
03bool ok = true;
04for (char c : t) {
05    if (c == '(' || c == '[' || c == '{') st.push(c);
06    else {
07        char o = st.top(); st.pop();
08        if ((c == ')' && o != '(') || (c == ']' && o != '[') || (c == '}' && o != '{')) ok = false;
09    }
10}
11cout << (ok && st.empty() ? 1 : 0);

输出是( )。

(1 分)
第 72 题 K4 未作答

栈空开始依次执行:push(1)push(2)pop 并输出栈顶、push(3)pop 并输出、pop 并输出。输出的三个数依次是( )。

(1 分)
第 73 题 K5 未作答

01stack<int> st;
02st.push(5); st.push(2); st.push(8);
03while (!st.empty()) { cout << st.top(); st.pop(); }

输出是( )。

(1 分)
第 74 题 K6 未作答

1,2,31, 2, 3 依次进栈(进栈顺序固定,可在任意时刻出栈),下列哪个出栈序列不可能( )。

(1 分)
拾贰

queue 代码

7 QUESTIONS · 2 POINTS EACH
第 75 题 L1 未作答

01queue<int> q;
02q.push(1); q.push(2); q.push(3);
03cout << q.front() << " " << q.back();

输出是( )。

(1 分)
第 76 题 L2 未作答

01queue<int> q;
02q.push(1); q.push(2); q.push(3);
03q.pop();
04cout << q.front();

输出是( )。

(1 分)
第 77 题 L3 未作答

01queue<int> q;
02q.push(1); q.push(2); q.push(3);
03q.pop();
04while (!q.empty()) { cout << q.front(); q.pop(); }

输出是( )。

(1 分)
第 78 题 L4 未作答

01queue<int> q;
02for (int i = 1; i <= 5; i++) q.push(i);
03int cnt = 0;
04while (!q.empty()) {
05    cnt++;
06    int x = q.front(); q.pop();
07    if (cnt % 3 == 0) cout << x << " ";
08    else q.push(x);
09}

输出是( )。

(1 分)
第 79 题 L5 未作答

图:11 连向 2,32, 322 连向 44。从 11 出发 BFS(入队即标记),队列逐个出队访问。访问顺序是( )。

(1 分)
第 80 题 L6 未作答

队列 q = {4, 7}(队头 44),执行:出队 xxxx11 后重新入队,共两次。最终队列(从队头到队尾)是( )。

(1 分)
第 81 题 L7 未作答

01queue<int> q;
02q.push(6);
03while (!q.empty()) q.pop();
04cout << q.size();

输出是( )。

(1 分)
拾叁

list 代码

5 QUESTIONS · 2 POINTS EACH
第 82 题 M1 未作答

01list<int> L;
02L.push_back(2); L.push_front(1); L.push_back(3);
03for (int x : L) cout << x;
04cout << " " << L.front() << " " << L.back();

输出是( )。

(1 分)
第 83 题 M2 未作答

01list<int> L;
02L.push_back(1); L.push_back(2); L.push_back(3);
03L.pop_front(); L.pop_back();
04for (int x : L) cout << x;

输出是( )。

(1 分)
第 84 题 M3 未作答

01list<int> L;
02for (int x : {1, 2, 3, 4, 5}) L.push_back(x);
03// 依次:弹出首端输出、弹出末端输出、再弹首端输出、再弹末端输出

四个输出的数字与剩余 size() 是( )。

(1 分)
第 85 题 M4 未作答

01list<int> L;
02for (int x : {4, 1, 3}) L.push_back(x);
03int s = 0;
04for (int x : L) s += x;
05cout << s;

输出是( )。

(1 分)
第 86 题 M5 未作答

01list<int> L;
02L.push_back(5); L.push_front(3); L.push_back(8); L.push_front(1);
03for (int x : L) cout << x;

输出是( )。

(1 分)
拾肆

完善程序

5 QUESTIONS · 2 POINTS EACH
第 87 题 N1 未作答

补全向 vector 尾部添加元素的语句:

01vector<int> v;
02for (int i = 1; i <= n; i++)
03    v./* 1 */(i);

空位 /* 1 */ 处应填( )。

(1 分)
第 88 题 N2 未作答

补全对 int a[N]nn 个元素的排序调用:

sort(a, /* 1 */);

空位 /* 1 */ 处应填( )。

(1 分)
第 89 题 N3 未作答

补全「取出栈顶处理并弹出」的两步:

01int x = st./* 1 */;
02st.pop();

空位 /* 1 */ 处应填( )。

(1 分)
第 90 题 N4 未作答

补全「处理队头并出队」:

01int x = q./* 1 */;
02q.pop();

空位 /* 1 */ 处应填( )。

(1 分)
第 91 题 N5 未作答

补全「处理完队头再出队」的语句顺序(处理为累加到 sum):

01while (!q.empty()) {
02    sum += q.front();
03    /* 1 */;
04}

空位 /* 1 */ 处应填( )。

(1 分)
拾伍

综合代码

4 QUESTIONS · 2 POINTS EACH
第 92 题 O1 未作答

01vector<int> v;
02for (int x : {5, 3, 8, 1}) v.push_back(x);
03sort(v.begin(), v.end());
04for (int x : v) cout << x;

输出是( )。

(1 分)
第 93 题 O2 未作答

01stack<int> st; queue<int> q;
02for (int x : {1, 2, 3}) st.push(x);
03while (!st.empty()) { q.push(st.top()); st.pop(); }
04while (!q.empty()) { cout << q.front(); q.pop(); }

输出是( )。

(1 分)
第 94 题 O3 未作答

01vector<int> v = {10, 20, 30};
02stack<int> st; queue<int> q;
03for (int x : v) st.push(x);
04for (int x : v) q.push(x);
05cout << st.top() << " " << q.front() << " " << q.back();

输出是( )。

(1 分)
第 95 题 O4 未作答

01struct P { string name; int sc; };
02vector<P> v = {{"Li", 85}, {"Zhao", 92}, {"Wang", 78}};
03sort(v.begin(), v.end(), [](const P& a, const P& b) { return a.sc > b.sc; });
04cout << v[0].name;

输出是( )。

(1 分)
拾陆

易错排查

5 QUESTIONS · 2 POINTS EACH
第 96 题 P1 未作答

vector<int> v; v.push_back(1); 之后执行 cout << v[5];,结果是( )。

(1 分)
第 97 题 P2 未作答

stack<int> st; 空栈直接执行 st.top(),结果是( )。

(1 分)
第 98 题 P3 未作答

int x = st.pop(); 这行代码( )。

(1 分)
第 99 题 P4 未作答

要排序 a[0..n-1]nn 个元素却写成 sort(a, a + n - 1);,后果是( )。

(1 分)
第 100 题 P5 未作答

for (int i = 0; i < (int)v.size(); i++) 循环体内执行了 v.pop_back();,可能的后果是( )。

(1 分)

真 题 演 练

1 QUESTIONS · 真题演练不计分
第 102~106 题 完善程序 (共 0 分) 未作答

试补全程序。

1  #include <bits/stdc++.h>
2  using namespace std;
3 
4  int main() {
5    int n;
6    cin >> n;
7 
8    vector<int> fac;
9    fac.reserve((int)ceil(sqrt(n)));
10 
11    int i;
12    for (i = 1; i * i < n; ++i) {
13      if (①) {
14        fac.push_back(i);
15      }
16    }
17 
18    for (int k = 0; k < fac.size(); ++k) {
19      cout << ② << " ";
20    }
21    if (③) {
22      cout << ④ << " ";
23    }
24    for (int k = fac.size() - 1; k >= 0; --k) {
25      cout << ⑤ << " ";
26    }
27  }

102.

①处应填( )

103.

②处应填( )

104.

③处应填( )

105.

④处应填( )

106.

⑤处应填( )

CSP-J 2022 · 完善程序 第35-39题 | 知识点 枚举、STL容器