如何向vector<string>逐字符插入元素及对应编译报错解决
报错原因
你定义的容器类型是vector<vector<string>>,内层存储的元素为std::string类型,但你调用emplace_back插入时传入的是单引号包裹的char类型字符。std::string没有支持直接传入单个char作为参数的构造函数,因此编译器找不到匹配的构造方法,抛出对应报错。
之前使用vector<vector<int>>可以正常运行,是因为字符字面值(如'z')本质是ASCII码对应的整数,可以自动隐式转换为int类型,符合构造要求。
修复方案
可以根据实际需求选择以下任意一种方案:
- 方案1:将插入的单引号字符改为双引号包裹的字符串字面值,传入
const char*类型参数构造std::string,修改后的代码如下:#include<bits/stdc++.h> using namespace std; int main() { vector<vector<string>>v; for(auto i=0;i<5;i++) v.emplace_back(vector<string>()); v[0].emplace_back("z"); v[1].emplace_back("r"); v[0].emplace_back("x"); v[1].emplace_back("g"); for(auto i:v){ for(auto j:i) cout<<j<<" ";cout<<endl; } return 0; } - 方案2:如果仅需要存储单个字符,直接修改内层容器类型为
char即可,原插入逻辑不需要改动,容器定义改为vector<vector<char>> v;即可正常运行。
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

