繁体   English   中英

没有匹配的函数调用'std::vector >::push_back(char&)'

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM