#CSPJDSR04. CSP-J 数据结构|R04 STL 容器 set、map、vector

CSP-J 数据结构|R04 STL 容器 set、map、vector

CSP-J 数据结构|R04 STL 容器 set、map、vector

训练重点: 去重与有序、键值映射、operator[] 副作用、vector 下标和常见复杂度

每题只有一个正确选项。建议按 CSP 初赛方式独立完成,程序阅读题必须在草稿纸上逐步模拟。

第 1 题

set<int> s; 中依次执行 insert(4), insert(1), insert(4), insert(3),则 s.size() 为( )。

{{ select(1) }}

  • 2
  • 3
  • 4
  • 5

第 2 题

对 set<int> s,s.count(x) 的常见返回值是( )。

{{ select(2) }}

  • 只可能是 0 或 1
  • 一定是 x 出现的任意次数
  • 返回迭代器
  • 返回最小元素

第 3 题

执行下面代码后,mp.size() 为( )。

map<int,int> mp;
cout << mp[8];

{{ select(3) }}

  • 0
  • 1
  • 8
  • 无法确定

第 4 题

若只想判断 map<int,int> mp 中 key=5 是否存在,又不希望创建新 key,最合适的是( )。

{{ select(4) }}

  • 直接读取 mp[5]
  • mp.count(5)
  • mp[5]++
  • mp[5]=0

第 5 题

若 vector<int> a 当前大小为 n>0,合法下标范围是( )。

{{ select(5) }}

  • 1 到 n
  • 0 到 n
  • 0 到 n-1
  • 任意整数

第 6 题

在 vector 中按下标访问 a[i] 的常见时间复杂度是( )。

{{ select(6) }}

  • O(1)
  • O(log n)
  • O(n)
  • O(n^2)

第 7 题

执行下面代码后输出顺序是( )。

set<int> s;
s.insert(6);
s.insert(2);
s.insert(5);
s.insert(2);
for(int x:s) cout << x << " ";

{{ select(7) }}

  • 6 2 5
  • 2 5 6
  • 2 2 5 6
  • 6 5 2

第 8 题

执行下面代码后,第一次输出的 key 是( )。

map<int,int> mp;
mp[3]=30;
mp[1]=10;
mp[2]=20;
for(auto p:mp){ cout << p.first; break; }

{{ select(8) }}

  • 1
  • 2
  • 3
  • 30

第 9 题

执行下面代码后,a 中元素依次为( )。

vector<int> a={30,10,20};
a.insert(a.begin()+1,99);
a.erase(a.begin()+2);
sort(a.begin(),a.end());

{{ select(9) }}

  • 10 20 30
  • 20 30 99
  • 10 30 99
  • 30 99 20

第 10 题

下列容器中,“支持下标随机访问、允许重复、长度可动态变化”的是( )。

{{ select(10) }}

  • set
  • map
  • vector
  • stack

作答要求

  • 栈题:画清 栈底 / 栈顶。
  • 队列题:标清 队首 / 队尾。
  • 循环队列:每次移动都写出取模后的下标。
  • 链表题:逐句修改 next 箭头,不要只靠心算。
  • STL 题:特别注意函数是否会改变容器内容。