【问题标题】:Why doesn't the push_back function accept the value/parameter?为什么 push_back 函数不接受值/参数?
【发布时间】:2021-09-30 09:53:24
【问题描述】:

我正在尝试将字符串的某些特定字符存储在向量中。但是,当我想推回字符时,值有问题,我不知道为什么。不幸的是,浏览 cpp 参考页面并没有帮助我。有人可以帮忙吗? 代码如下:

int main()
{
    std::string str1 = "xxxGGxx$xxxGxTxGx";

    std::vector<std::string> vec;
    std::vector<std::string>::iterator it;
    
    for(auto &ch:str1)
    {
        if(ch == 'G' || ch == '$' || ch == 'T')
        {
            vec.push_back(ch); //Problem: ch not accepted 
        }
    }
    
    for(it = vec.begin(); it!=vec.end(); it++)
    {
        std::cout << *it;
    }
    
    
}

【问题讨论】:

  • ch 是一个字符,你的向量包含字符串,所以你必须使用适当的构造函数来构造字符串,没有为这种情况提供默认的构造函数。
  • ch 的类型适合您吗?是std::string 还是charvec.push_back 期待什么?
  • 为了增加您的问题的价值,您应该在尝试编译代码时包含您收到的错误消息。

标签: c++ string vector


【解决方案1】:

向量的类型必须是char,而不是string

【讨论】:

    【解决方案2】:

    原因 vec.push_back(ch);不起作用是因为 vec 是字符串向量而不是 char 向量。 push_back() 仅接受存储在向量中的类型,在本例中为字符串。 vector 不能 push_back 字符串,因为字符串不能隐式转换为 int。它必须先以某种方式转换为 int 然后推回。由于无法将 char 隐式转换为字符串,因此编译器会感到困惑并认为这是不可能的。

    有两种简单的选择:

    1. 而不是使用vector 使用vector 这样push_back() 将追加字符。
        vector<char> vec;
        char ch = 'a';
        vec.push_back(ch);  // both these work
        vec.push_back('b'); // both these work
    
    1. 或者,将您的 char 转换为字符串,然后调用 push_back 到您的字符串。
    string str(1, ch);  // Creates a string containing 1 character equal to ch
    vec.push_back(str); // Push back our string
    

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 2022-09-23
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 2017-08-11
      • 2021-09-27
      相关资源
      最近更新 更多