表示“谁”
分数、坐标、种类、字符都可以映射成下标。
cnt[t]++C++ FOUNDATION · ARRAYS & VECTOR
数组标记与 vector 课堂代码详解
把“计数、覆盖、最值、筛选”拆成可迁移的解题动作。先看懂数据如何流动,再记住模板。
分数、坐标、种类、字符都可以映射成下标。
cnt[t]++出现几次、是否覆盖、当前最低价,都由元素值表达。
a[i] = 1不知道会留下多少项时,让动态数组按需扩展。
a.push_back(t)把分数当作桶编号,桶里的数字就是人数。
int cnt[1010] = {}, n, m, t;
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> t;
cnt[t]++;
}
for(int i = 0; i <= m; i++)
cout << cnt[i] << " ";关键cnt[t]++:用值作下标,对应计数加 1。
易错数组必须 = {} 清零;输出要写 i <= m,不能漏掉满分。
重叠位置只算一次,所以“标记为 1”,而不是反复累加。
int n, l, r, a[10010] = {};
cin >> n;
while(n--){
cin >> l >> r;
for(int i = l; i <= r; i++) a[i] = 1;
}
int cnt = 0;
for(int i = 0; i <= 10000; i++)
if(a[i] == 1) cnt++;关键a[i] = 1 表示位置已经覆盖,多次覆盖状态仍是 1。
易错不要直接相加各区间长度,否则重叠部分会被重复计算。
每类文具只保留目前见过的最低价格。
int a[100010] = {}, m, n;
cin >> m >> n;
for(int i = 1; i <= n; i++){
int k, p; cin >> k >> p;
if(a[k] == 0 || a[k] > p) a[k] = p;
}
int sum = 0;
for(int i = 1; i <= m; i++) sum += a[i];关键a[k] == 0 处理第一次遇到;之后只接受更低价格。
易错若只判断 a[k] > p,初值 0 永远不会被正价格更新。
字符也能映射成下标;相同次数时,保留最后出现者。
int cnt[130] = {};
for(int i = 0; i < s.size(); i++)
cnt[s[i]]++;
int maxn = -1e9; char res;
for(int i = 0; i < s.size(); i++){
if(cnt[s[i]] >= maxn){
maxn = cnt[s[i]]; res = s[i];
}
}int cnt[30] = {};
for(char ch : s) cnt[ch - 'a']++;
int maxx = 0; char ans;
for(char ch : s){
if(cnt[ch - 'a'] >= maxx){
maxx = cnt[ch - 'a']; ans = ch;
}
}关键>= 让后遇到的同频字符覆盖前者;> 则会保留第一个。
对比ASCII 写法更通用;ch-'a' 只适合纯小写字母,但更省空间。
边读边筛选,把需要的结果按原顺序放进 vector。
vector<int> a;
for(int i = 0; i < n; i++){
cin >> t;
if(t % 2 != 0) a.push_back(t);
}
bool first = true;
for(int x : a){
if(!first) cout << ",";
cout << x; first = false;
}关键push_back 动态追加;first 避免首尾多出逗号。
易错判断奇数用 t % 2 != 0,才能正确包含负奇数。
vector<int> v;空容器,size 为 0
v.push_back(10);尾部添加,自动扩容
v.pop_back();删除末项,非空时使用
v.clear();清空元素,容量可能保留
vector<int> v1;vector<int> v2(5);vector<int> v3(5, 8);空 / 5 个 0 / 5 个 8cnt[value]++;值域较小,要求频次统计。
a[position] = 1;只关心“是否出现/覆盖”。
best = min(best, x);扫描过程中只保留当前最优。
v.push_back(x);结果数量未知,且需保留顺序。
选择课堂题目,修改输入,点击运行。这里用与讲义代码相同的逻辑在浏览器中模拟结果,适合验证思路与边界。
等待运行…
源代码可直接修改;运行时由在线 GCC 沙箱编译,勿提交隐私信息。