我已经声明了字符串向量,并且还声明了具有某些值的字符串变量。当我尝试将我的字符串变量的每个字符都推回字符串向量时。我收到一个错误。如果我将字符串向量更改为char向量,则代码可以正常工作。
为什么字符串向量在push_back()方法中不带字符?
#include<iostream>
#include<vector>
int main() {
vector<string> vec;
string s = "hello";
int len = vec.size();
for(int i=0; i<len; i++) {
vec.push_back(s[i]);
}
}
错误:没有匹配函数调用'std :: vector> :: push_back(char&)'
Fix: vector<char> vec;
错误是因为您无法执行此操作:
std::string('a');
或此:
string s = "hello";
std::string(s[0]);
[std::string
没有任何采用单个char
的构造函数。
有3个选项:
std::string
中最简单的一个。 std::string
是与std::vector
非常相似的容器,只是它仅存储char
类型。
std::vector<char>
如果您需要一个向量而不是字符串,那么使用单个字符的向量而不是1个字符长的字符串的向量更为合理。您可以使用
对其进行初始化std::vector<char> vec(s.begin(), s.end())
或您尝试中所做的:
std::vector<char> vec;
std::string s = "hello";
for(int i=0; i<s.length(); i++) {
vec.push_back(s[i]);
}
std::vector<std::string>
如果确实需要使用字符串向量,则需要使用正确的std::string
构造函数
std::vector<std::string> vec;
std::string s = "hello";
for(int i=0; i< s.length(); i++) {
vec.push_back(std::string(1, s[i]));
}
或更简单一些std::vector::emplace_back()
std::vector::emplace_back()