C++中为何可以使用char类型访问vector<int>
char类型可以作为vector下标是C++本身的类型规则决定的,和vector的特殊处理无关,具体逻辑如下:
1 类型本质
C++中的char属于整型家族的基础类型,每个字符值都对应系统字符编码的整数值:比如标准ASCII编码下,'a'对应的整数值就是97,'0'对应的整数值是48。
2 隐式转换规则
std::vector的operator[]接收的参数是size_type类型(本质是无符号整型)。当传入char类型作为下标时,编译器会自动触发隐式整型转换,将char对应的编码整数值转为size_type后再用于下标寻址,和你手动写chars[97]的效果完全一致。
你给出的示例代码等效于如下写法:
vector<int> chars(128); char c = 'a'; // 隐式转换后等价于执行下面的语句 chars[97]++;
3 常见使用说明
这种写法是算法题中统计字符频率、记录字符出现位置的常用技巧,因为用数组/vector索引寻址的效率远高于哈希表。
注意:部分编译器默认将
char作为有符号类型处理,取值范围为-128~127,如果你的场景涉及编码值大于127的扩展字符,直接用char当下标会出现负数越界的问题,建议先强转为无符号char再使用:chars[static_cast<unsigned char>(c)]++;
另外这种写法同样适用于普通数组,属于C/C++的通用语法规则,不是vector独有的特性。
内容的提问来源于stack exchange,提问作者digdigdoot
相关产品推荐
相关产品推荐

