[英]no matching function for call to std::vector<std::tuple> push_back
[英]no matching function for call to 'std::vector >::push_back(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-char-long-strings 的向量更合理。
您可以使用
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<std::string> vec;
std::string s = "hello";
for(int i=0; i< s.length(); i++) {
vec.emplace_back(1, s[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.