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

问题描述 投票:-2回答:1

我已经声明了字符串向量,并且还声明了具有某些值的字符串变量。当我尝试将我的字符串变量的每个字符都推回字符串向量时。我收到一个错误。如果我将字符串向量更改为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;
c++ string vector stl char
1个回答
0
投票

错误是因为您无法执行此操作:

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()
© www.soinside.com 2019 - 2024. All rights reserved.