vector <string>中的push_back显示错误

问题描述

我插入了一个字符串,我希望将每个字符分别插入向量字符串中。使用push_back函数时,出现以下错误

错误:没有匹配功能调用
'std::vector<std::__cxx11::basic_string<char> >::push_back(__gnu_cxx::__alloc_traits<std::allocator<char>,char>::value_type&)' 27 | color.push_back(str[i]);**

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main(){
    int t;
    cin >> t;
    string str;
    char in;
    while(t--){
        cin >> str;
        sort(str.begin(),str.end());

        vector<string> chr;
        for (int i = 0; i < str.size(); i++){
            chr.push_back(str[i]);
        }

        for (int i = 0; i < chr.size(); i++)
            cout << chr[i] << " ";
    }
}

非常感谢您

解决方法

问题是您有一个向量,并且试图用字符而不是字符串来调用push_back。除非将x类型的值隐式转换为字符串,否则不能将x类型的值压入向量,但不幸的是,没有一个带有char的std :: string构造函数。

您可以通过将vector 设置为vector 来解决此问题,也可以使用字符串而不是char调用push_back。

选项1:将chr设为char的向量,而不是string的向量

vector<char> chr;
for(int i = 0; i < str.size(); i++){
  chr.push_back(str[i]);
}

vector<char> chr(str.begin(),str.end());

选项2:使用push_back更改代码以使用字符串而不是char

vector<string> chr;
for(int i = 0; i < str.size(); i++){
  chr.push_back(str.substr(i,i+i));
}

基于您正在做的事情,选项1可能就是您想要的。如果确实需要向量字符串,则选项2将编译。