You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么这段使用std::vector的C++代码会触发运行时错误?

C++字符串匹配计数代码报错排查

核心错误点

  • 空vector非法下标访问:你声明的vector<int> res为长度0的空容器,C++的std::vector下标访问不会自动扩容,直接通过res[i]赋值属于越界内存访问,是导致运行报错的直接原因。
  • 可选优化:如果不需要保证哈希表有序,优先用unordered_map<string, int>替代map,字符串查找的时间复杂度更低。

修复方案

有两种可行修改方式:

  1. 初始化时为res预分配足够空间
    创建res时直接指定长度和查询列表q的长度一致,即可正常通过下标赋值,优化后的完整代码如下:
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;

vector<int> matchingStrings(vector<string> s, vector<string> q) {
    vector<int> res(q.size()); // 预分配和查询数组等长的空间
    unordered_map<string, int> mp;
    for(int i = 0; i < s.size(); i++){
        mp[s[i]]++;
    }
    for(int i = 0; i < q.size(); i++){
        res[i] = mp[q[i]]; 
    }
    return res;
}
  1. 使用push_back方法追加元素
    不预分配空间的情况下,将原来的赋值行改为尾插即可:
res.push_back(mp[q[i]]);

内容的提问来源于stack exchange,提问作者Ayush Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:54:07