林老师 · 客观题题库 · 第 36 章 STL与语法进阶 · 知识细节练习

第 36 章 STL与语法进阶 · 知识细节练习

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

判 分 报 告

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

STL 总览

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

STL 的三大组成部分是?

(1 分)
第 2 题 A2 未作答

STL 容器的三大类是?

(1 分)
第 3 题 A3 未作答

判断题:序列容器(vector/deque/list)按下标顺序存储——vector 随机访问 O(1)O(1)、头部插入慢;list 任意位置插入 O(1)O(1)、但不支持随机访问。

(1 分)
第 4 题 A4 未作答

判断题:set/map 基于红黑树——元素自动按键有序,插入、删除、查找都是 O(logn)O(\log n)

(1 分)
第 5 题 A5 未作答

判断题:stack/queue/priority_queue 是容器适配器——本身不存数据,底层靠别的容器(默认 deque/vector)实现。

(1 分)
第 6 题 A6 未作答

STL 总表是?

(1 分)

vector 与 string

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

vector 的核心操作是?

(1 分)
第 8 题 B2 未作答

判断题:vector 的 size 是元素个数、capacity 是已分配空间——push_back 超出 capacity 时按倍数(常为 2 倍)扩容并把元素搬过去。

(1 分)
第 9 题 B3 未作答

string 的常用操作是?

(1 分)
第 10 题 B4 未作答

判断题:s.find(x) 找不到时返回 string::npos(一个很大的 size_t 值)——判断要写 != string::npos 而不是 != -1 的整数比较习惯。

(1 分)
第 11 题 B5 未作答

判断题:stoi("123") 把字符串转 int、to_string(45) 把数转字符串——两者互为逆操作。

(1 分)
第 12 题 B6 未作答

判断题:vector 扩容或 erase 后,之前的迭代器会失效——继续使用是未定义行为。

(1 分)
第 13 题 B7 未作答

判断题:vector 比普通数组安全/方便——自动扩容、知道自己的 size、可整体排序赋值,代价是常数略大。

(1 分)

set 与 map

7 QUESTIONS · 2 POINTS EACH
第 14 题 C1 未作答

set 的特点是?

(1 分)
第 15 题 C2 未作答

判断题:multiset 允许重复元素——count(x) 返回 x 的出现次数,erase(x) 会删掉所有 x。

(1 分)
第 16 题 C3 未作答

map 的特点是?

(1 分)
第 17 题 C4 未作答

判断题:for (auto &p : m) 遍历 map 时按键的升序输出——因为底层是红黑树。

(1 分)
第 18 题 C5 未作答

判断题:set/map 用成员函数 s.lower_bound(x)O(logn)O(\log n);用 std::lower_bound(s.begin(), s.end(), x) 则是 O(n)O(n)——树结构不能随机访问。

(1 分)
第 19 题 C6 未作答

判断题:m[key] 访问不存在的键会插入一个默认值(int 为 0)——判断存在要用 countfind

(1 分)
第 20 题 C7 未作答

判断题:unordered_map 的遍历顺序与插入顺序一致。

(1 分)

栈队列优先队列回顾

7 QUESTIONS · 2 POINTS EACH
第 21 题 D1 未作答

stack 的核心操作是?

(1 分)
第 22 题 D2 未作答

判断题:queue 的 push 在队尾、pop 在队头、front 取队头——先进先出(FIFO)。

(1 分)
第 23 题 D3 未作答

判断题:priority_queue<int> 默认是小根堆——队首是全局最小值。

(1 分)
第 24 题 D4 未作答

判断题:priority_queue<int, vector<int>, greater<int>>小根堆——队首是全局最小值。

(1 分)
第 25 题 D5 未作答

判断题:优先队列自定义比较器的方向与 sort 相反——a < b 返回 true 意味着 a 排在堆的后面(大根堆)。

(1 分)
第 26 题 D6 未作答

判断题:deque 支持头尾两端 O(1)O(1) 插入删除(push_front/push_back/pop_front/pop_back),也支持随机访问。

(1 分)
第 27 题 D7 未作答

栈队列选择矩阵是?

(1 分)

算法库

6 QUESTIONS · 2 POINTS EACH
第 28 题 E1 未作答

sort(v.begin(), v.end(), [](int a, int b){ return a > b; }) 的效果是?

(1 分)
第 29 题 E2 未作答

判断题:lower_bound(v.begin(), v.end(), x) 返回迭代器(第一个 ≥x 的位置),取下标要减 v.begin(),取元素用 *it

(1 分)
第 30 题 E3 未作答

判断题:unique 只去掉相邻的重复元素,返回新末尾迭代器——配合 erase 才真正删除,前提是先 sort。

(1 分)
第 31 题 E4 未作答

判断题:binary_search(v.begin(), v.end(), x) 返回 bool(是否存在),要求序列已排序,复杂度 O(logn)O(\log n)

(1 分)
第 32 题 E5 未作答

判断题:next_permutation 把序列变成字典序下一个排列,返回 false 表示已是最后一个排列。

(1 分)
第 33 题 E6 未作答

判断题:min_element/max_element 返回最值的迭代器(取元素要解引用);count(begin, end, x) 返回 x 出现次数。

(1 分)

lambda 与函数对象

6 QUESTIONS · 2 POINTS EACH
第 34 题 F1 未作答

lambda 表达式的语法是?

(1 分)
第 35 题 F2 未作答

lambda 的捕获列表 [&][=] 的含义是?

(1 分)
第 36 题 F3 未作答

判断题:sort 的比较器写 return a <= b; 也行,效果与 < 一样。

(1 分)
第 37 题 F4 未作答

判断题:函数对象 = 重载了 operator() 的类/结构体实例——像函数一样调用,且能携带状态,常用于自定义比较器。

(1 分)
第 38 题 F5 未作答

判断题:pair<int,int> 存两个值(first/second,自带字典序比较);tuple 可存任意多个值(get<0> 取值)。

(1 分)
第 39 题 F6 未作答

判断题:自定义排序比较器三种写法等价——lambda、普通函数、函数对象(重载 operator())。

(1 分)

位运算与 bitset

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

位运算六种操作是?

(1 分)
第 41 题 G2 未作答

判断题:lowbit(x) = x & (-x) 取出 x 二进制中最低位的 1 及其后的 0——树状数组的核心。

(1 分)
第 42 题 G3 未作答

判断题:x & (x - 1) 把 x 二进制中最低位的 1 清零——统计 1 的个数(popcount)可反复用此式。

(1 分)
第 43 题 G4 未作答

判断题:for (sub = mask; sub; sub = (sub - 1) & mask) 枚举 mask 的全部非空子集(含 mask 本身)。

(1 分)
第 44 题 G5 未作答

bitset 类的特点是?

(1 分)
第 45 题 G6 未作答

判断题:位运算应用——状态压缩集合、快速判奇偶 x & 1、乘除 2 的幂 x << k / x >> k、交换两数 a ^= b ^= a ^= b 思想。

(1 分)

语法易错

5 QUESTIONS · 2 POINTS EACH
第 46 题 H1 未作答

判断题:遍历中删除 vector 元素的正确写法是 it = v.erase(it)(erase 返回下一个元素的新迭代器);v.erase(it) 后继续 it++ 会迭代器失效。

(1 分)
第 47 题 H2 未作答

判断题:for (int x : v) 的 x 是拷贝——改 x 不影响原元素;要修改必须写 for (int &x : v)

(1 分)
第 48 题 H3 未作答

判断题:v[i] 越界不检查(未定义行为);v.at(i) 越界会抛异常——稳妥用 at 或先查 size。

(1 分)
第 49 题 H4 未作答

判断题:ios::sync_with_stdio(false) 关闭与 C 输入输出的同步能大幅加速 cin/cout——代价是不能再混用 scanf/printf。

(1 分)
第 50 题 H5 未作答

判断题:以下结论全部正确——"set/map 有序 O(logn)O(\log n)、unordered_* 哈希平均 O(1)O(1);priority_queue 默认大根堆;unique 要先 sort 且只去相邻重复;erase 返回下一个迭代器;范围 for 修改要引用;lambda 捕获 [&] 引用 [=] 值"。

(1 分)

vector/string 代码

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

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v;
05    v.push_back(3); v.push_back(1); v.push_back(2);
06    sort(v.begin(), v.end());
07    for (int x : v) cout << x << " ";
08    cout << endl << v.size();
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 52 题 I2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    string s = "abcde";
05    cout << s.substr(1, 3) << endl;   // 从下标 1 起截 3 个
06    cout << s.substr(2) << endl;      // 从下标 2 到末尾
07    return 0;
08}

单选题:程序输出是?

(1 分)
第 53 题 I3 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    string s = "banana";
05    cout << s.find("na") << " ";                       // 第一次出现位置
06    cout << (s.find("xyz") == string::npos) << endl;   // 找不到返回 npos
07    return 0;
08}

单选题:程序输出是?

(1 分)
第 54 题 I4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    cout << stoi("123") + 1 << endl;
05    cout << to_string(45) + "6" << endl;
06    return 0;
07}

单选题:程序输出是?

(1 分)
第 55 题 I5 未作答

01// 遍历中删除所有偶数(正确写法):
02for (auto it = v.begin(); it != v.end(); ) {
03    if (*it % 2 == 0) it = ______;   // erase 返回下一个元素的新迭代器
04    else ++it;
05}

单选题:横线处应填入?

(1 分)
第 56 题 I6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {1, 2, 3};
05    v.insert(v.begin() + 1, 9);        // 在下标 1 处插入 9
06    for (int x : v) cout << x << " ";
07    return 0;
08}

单选题:程序输出是?

(1 分)

set/map 代码

6 QUESTIONS · 2 POINTS EACH
第 57 题 J1 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    set<int> s;
05    s.insert(3); s.insert(1); s.insert(2);
06    s.insert(1); s.insert(2);          // 重复插入无效
07    for (int x : s) cout << x << " ";
08    cout << endl << s.size();
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 58 题 J2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    multiset<int> ms;
05    ms.insert(3); ms.insert(1); ms.insert(2);
06    ms.insert(1); ms.insert(2);
07    cout << ms.count(2) << " " << ms.size();
08    return 0;
09}

单选题:程序输出是?

(1 分)
第 59 题 J3 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    map<string, int> m;
05    m["b"] = 2; m["a"] = 1; m["c"] = 3;   // 插入顺序打乱
06    for (auto &p : m) cout << p.first << p.second << " ";
07    return 0;
08}

单选题:程序输出是?(map 按键升序遍历)

(1 分)
第 60 题 J4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    map<int, int> m;
05    m[1] = 10;
06    cout << m.count(1) << " " << m.count(2) << endl;
07    m[2];                               // 访问不存在的键——会插入默认值 0
08    cout << m.size();
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 61 题 J5 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    set<int> s = {1, 3, 5, 7, 9};
05    cout << *s.lower_bound(5) << " ";    // 第一个 >= 5
06    cout << *s.lower_bound(6);           // 第一个 >= 6
07    return 0;
08}

单选题:程序输出是?

(1 分)
第 62 题 J6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    set<int> s;
05    s.insert(3); s.insert(1); s.insert(2);
06    s.erase(2);                         // 删除 2
07    for (int x : s) cout << x << " ";
08    cout << endl << s.size();
09    return 0;
10}

单选题:程序输出是?

(1 分)
拾壹

栈队列优先队列代码

7 QUESTIONS · 2 POINTS EACH
第 63 题 K1 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    stack<int> st;
05    st.push(1); st.push(2); st.push(3);
06    while (!st.empty()) {
07        cout << st.top() << " ";
08        st.pop();
09    }
10    return 0;
11}

单选题:程序输出是?(后进先出)

(1 分)
第 64 题 K2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    queue<int> q;
05    q.push(1); q.push(2); q.push(3);
06    while (!q.empty()) {
07        cout << q.front() << " ";
08        q.pop();
09    }
10    return 0;
11}

单选题:程序输出是?(先进先出)

(1 分)
第 65 题 K3 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    priority_queue<int> q;             // 默认大根堆
05    q.push(3); q.push(1); q.push(2);
06    while (!q.empty()) {
07        cout << q.top() << " ";
08        q.pop();
09    }
10    return 0;
11}

单选题:程序输出是?

(1 分)
第 66 题 K4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    priority_queue<int, vector<int>, greater<int>> q;   // 小根堆
05    q.push(3); q.push(1); q.push(2);
06    while (!q.empty()) {
07        cout << q.top() << " ";
08        q.pop();
09    }
10    return 0;
11}

单选题:程序输出是?

(1 分)
第 67 题 K5 未作答

01#include <bits/stdc++.h>
02using namespace std;
03struct Cmp {
04    bool operator()(int a, int b) { return a > b; }   // a 更大则 a 排在后面
05};
06int main() {
07    priority_queue<int, vector<int>, Cmp> q;          // 效果:小根堆
08    q.push(3); q.push(1); q.push(2);
09    while (!q.empty()) {
10        cout << q.top() << " ";
11        q.pop();
12    }
13    return 0;
14}

单选题:程序输出是?(注意:优先队列比较器方向与 sort 相反)

(1 分)
第 68 题 K6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    deque<int> d;
05    d.push_back(1);      // [1]
06    d.push_front(2);     // [2,1]
07    d.push_back(3);      // [2,1,3]
08    d.pop_front();       // [1,3]
09    cout << d.front() << " " << d.back();
10    return 0;
11}

单选题:程序输出是?

(1 分)
第 69 题 K7 未作答

// 用大根堆取前 3 大的数:{3,1,4,1,5,9,2,6} → 依次弹出 9 6 5

单选题:程序输出是?

(1 分)
拾贰

算法库代码

6 QUESTIONS · 2 POINTS EACH
第 70 题 L1 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {3, 1, 2};
05    sort(v.begin(), v.end(), [](int a, int b) { return a > b; });
06    for (int x : v) cout << x << " ";
07    return 0;
08}

单选题:程序输出是?

(1 分)
第 71 题 L2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {1, 1, 2, 2, 3};
05    sort(v.begin(), v.end());                 // 先排序
06    v.erase(unique(v.begin(), v.end()), v.end());
07    for (int x : v) cout << x << " ";
08    cout << endl << v.size();
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 72 题 L3 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {1, 2, 3};
05    next_permutation(v.begin(), v.end());
06    for (int x : v) cout << x << " ";
07    cout << endl;
08    prev_permutation(v.begin(), v.end());
09    for (int x : v) cout << x << " ";
10    return 0;
11}

单选题:程序输出是?

(1 分)
第 73 题 L4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};
05    cout << *min_element(v.begin(), v.end()) << " ";
06    cout << *max_element(v.begin(), v.end()) << " ";
07    cout << count(v.begin(), v.end(), 1);
08    return 0;
09}

单选题:程序输出是?

(1 分)
第 74 题 L5 未作答

01sort(v.begin(), v.end(), [](int a, int b) {
02    return ______;                    // 降序
03});

单选题:横线处应填入?

(1 分)
第 75 题 L6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {1, 2, 3, 4, 5};
05    cout << binary_search(v.begin(), v.end(), 3) << " ";
06    cout << *lower_bound(v.begin(), v.end(), 3) << " ";
07    cout << *upper_bound(v.begin(), v.end(), 3);
08    return 0;
09}

单选题:程序输出是?

(1 分)
拾叁

lambda 与 bitset 代码

6 QUESTIONS · 2 POINTS EACH
第 76 题 M1 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int x = 5;
05    auto addOne = [&x]() { x++; };     // 按引用捕获 x
06    addOne();
07    addOne();
08    cout << x;
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 77 题 M2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    pair<int, int> p = {3, 1};
05    cout << p.first << " " << p.second << " ";
06    cout << (p > make_pair(2, 9));     // 字典序比较:3 > 2
07    return 0;
08}

单选题:程序输出是?

(1 分)
第 78 题 M3 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int x = 12;                        // 二进制 1100
05    cout << (x & (-x));                // lowbit:最低位的 1 及其后的 0
06    return 0;
07}

单选题:程序输出是?

(1 分)
第 79 题 M4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    cout << (12 & 11) << " ";          // 1100 & 1011 = 1000
05    int x = 13, cnt = 0;               // 1101 中 1 的个数
06    while (x) { x &= (x - 1); cnt++; }
07    cout << cnt;
08    return 0;
09}

单选题:程序输出是?

(1 分)
第 80 题 M5 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int mask = 6;                      // 二进制 110 = {2, 3}
05    for (int sub = mask; sub; sub = (sub - 1) & mask)
06        cout << sub << " ";
07    return 0;
08}

单选题:程序输出是?(mask = 6 的全部非空子集)

(1 分)
第 81 题 M6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    bitset<8> b(10);                   // 10 的二进制 00001010
05    cout << b << endl;
06    cout << b.count() << " " << b.test(3) << " " << b[0];
07    return 0;
08}

单选题:程序输出是?

(1 分)
拾肆

综合代码

6 QUESTIONS · 2 POINTS EACH
第 82 题 N1 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    string s = "a b a c b a";
05    stringstream ss(s);
06    map<string, int> m;
07    string w;
08    while (ss >> w) m[w]++;
09    for (auto &p : m) cout << p.first << p.second << " ";
10    return 0;
11}

单选题:程序输出是?(词频统计,按键升序)

(1 分)
第 83 题 N2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {3, 1, 2, 1};
05    set<int> s(v.begin(), v.end());          // 用 vector 初始化 set
06    vector<int> u(s.begin(), s.end());       // 用 set 初始化 vector
07    for (int x : u) cout << x << " ";
08    cout << endl << s.size();
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 84 题 N3 未作答

// 用小根堆维护前 3 大:依次处理 {3,1,4,1,5,9,2,6}
// 堆内始终是当前已见元素中最大的 3 个
// 5 顶掉 1、9 顶掉 4、6 顶掉 4 → 最终 {5,6,9}

单选题:程序输出是?(升序输出堆内元素)

(1 分)
第 85 题 N4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    cout << ((8 & 7) == 0) << " ";     // 8 是 2 的幂
05    cout << ((12 & 11) == 0);          // 12 不是 2 的幂
06    return 0;
07}

单选题:程序输出是?

(1 分)
第 86 题 N5 未作答

01priority_queue<int, vector<int>, ______> q;   // 小根堆

单选题:横线处应填入?

(1 分)
第 87 题 N6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    string s = "1 2 3";
05    stringstream ss(s);
06    int x, sum = 0;
07    while (ss >> x) sum += x;
08    cout << sum;
09    return 0;
10}

单选题:程序输出是?(stringstream 逐个提取整数求和)

(1 分)
拾伍

完善程序

7 QUESTIONS · 2 POINTS EACH
第 88 题 O1 未作答

01vector<int> v = {3, 1, 2};
02sort(v.begin(), v.end(), ①);          // 降序排序

单选题:①处应填?

(1 分)
第 89 题 O2 未作答

01map<int, int> m;
02if (①) cout << "存在";               // 判断键 5 是否存在

单选题:①处应填?

(1 分)
第 90 题 O3 未作答

01priority_queue<int, vector<int>, ①> q;   // 小根堆

单选题:①处应填?

(1 分)
第 91 题 O4 未作答

01vector<int> v = {1, 1, 2, 2, 3};
02sort(v.begin(), v.end());
03v.erase(①, v.end());                  // 删掉 unique 之后的多余元素

单选题:①处应填?

(1 分)
第 92 题 O5 未作答

01int x = 0;
02auto add = [①](int v) { x += v; };    // 按引用捕获 x,累加
03add(3); add(4);

单选题:①处应填?

(1 分)
第 93 题 O6 未作答

bitset<8> b(10);
cout << b.①;                          // 输出 1 的个数(10 → 2)

单选题:①处应填?

(1 分)
第 94 题 O7 未作答

01for (auto it = v.begin(); it != v.end(); ) {
02    if (*it % 2 == 0) it = ①;         // 删除偶数,拿到下一个迭代器
03    else ++it;
04}

单选题:①处应填?

(1 分)
拾陆

代码易错

6 QUESTIONS · 2 POINTS EACH
第 95 题 P1 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {1, 2, 4, 3};
05    for (auto it = v.begin(); it != v.end(); ++it) {
06        if (*it % 2 == 0)
07            v.erase(it);               // 注意:erase 后 it 失效,++it 会跳过元素
08    }
09    for (int x : v) cout << x << " ";
10    return 0;
11}

单选题:程序输出是?(正确结果应为 1 3——4 被漏删)

(1 分)
第 96 题 P2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    vector<int> v = {1, 2, 3};
05    for (int x : v) x = 0;             // 注意:x 是拷贝,改它不影响原元素
06    for (int x : v) cout << x << " ";
07    return 0;
08}

单选题:程序输出是?(想清空却没清掉)

(1 分)
第 97 题 P3 未作答

01// 想按升序排序,但 lambda 比较器写反了:
02vector<int> v = {3, 1, 2};
03sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

单选题:程序输出是?(预期升序 1 2 3,实际得降序)

(1 分)
第 98 题 P4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    map<int, int> m;
05    m[1] = 10;
06    if (m[2] == 0) {                   // 注意:m[2] 会把 2 插入 map
07        // 本想检查 2 是否存在
08    }
09    cout << m.size();                  // 应为 1,实际变 2
10    return 0;
11}

单选题:程序输出是?(正确结果应为 1

(1 分)
第 99 题 P5 未作答

01// 在 set 上查找:
02std::lower_bound(s.begin(), s.end(), x);   // 注意:这是 O(n) 的
03// 而成员函数 s.lower_bound(x) 才是 O(log n)

单选题:判断题——std::lower_bound 用在 set 上时,因为 set 迭代器不支持随机访问,复杂度退化为 O(n)O(n)

(1 分)
第 100 题 P6 未作答

判断题:以下五种易错写法都会导致程序出错或行为异常——①erase 后不接收返回迭代器继续 ++(漏删元素)②范围 for 用值拷贝想修改原元素(改不动)③sort 比较器方向写反(排序结果相反)④用 m[key] 检查键是否存在(误插入默认值)⑤在 set 上用 std::lower_bound(复杂度退化为 O(n)O(n))。

(1 分)