【问题标题】:What function data type should I use to return a vector.push_back()?我应该使用什么函数数据类型来返回 vector.push_back()?
【发布时间】:2021-01-05 21:04:10
【问题描述】:
string yesno(string holder ,vector<string> symptom)
{
    if(holder == "Y" || holder == "y"){
        return symptom.push_back("Y");
    }
    else if(holder == "N" || holder == "n"){
        return symptom.push_back("N");
    }
    else{
        cout <<"Wrong input" << endl;
        return symptom.push_back("-");
    }
}

所以这是我的功能,当我询问用户他们是否正在经历某种症状,然后询问 Y/y 或 N/n 以获得答案。

函数中的 if 块检测到 Y 或 N 的大小写,然后我将 symptom.push_back() 返回为“Y”或“N”,但出现此错误:

错误:无法转换 'symptom.std::vectorstd::__cxx11::basic_string

【问题讨论】:

  • void yesno(string holder ,vector&lt;string&gt; symptom) 从字面上看是您唯一的选择。无论您想做什么,这都不是解决方案。
  • 也许你的意思是if(holder == "Y" || holder == "y") { symptom.push_back("Y"); return "Y"; },等等。
  • 请记住,您的函数将按值接收向量作为副本,因此您对其所做的任何更改都不会在此函数之外可见。您可能希望通过引用传递向量或简单地返回向量,但如果没有在minimal reproducible example 中使用它的上下文,很难给出建议。
  • 你打算返回值做什么?应该返回什么value?您是否期望 .push_back 本身返回一些东西?如果是这样,是什么以及为什么?你有没有尝试阅读它的文档?
  • 你真正想要的是vector.emplace_back和c++17或更高版本,然后该函数返回对插入元素en.cppreference.com/w/cpp/container/vector/emplace_back的引用

标签: c++ function vector types


【解决方案1】:

std::vector.push_back() 函数有一个void 返回类型,因此没有办法您可以将它返回的内容转换为any 类型(因为它不返回任何东西)。

但是,有std::vector.back() 函数,它返回对最后一个元素的引用;因此,您可以在相关块中进行有条件的 push_back() 调用,然后使用 single return 语句“检索”被推送的元素:

string yesno(string holder, vector<string> symptom)
{
    if (holder == "Y" || holder == "y") {
        symptom.push_back("Y");
    }
    else if (holder == "N" || holder == "n") {
        symptom.push_back("N");
    }
    else {
        cout << "Wrong input" << endl;
        symptom.push_back("-");
    }
    return symptom.back();
}

此外,如 cmets 中所述,您正在传递您的 symptom 向量按值,这意味着将使用本地副本,并且在函数执行时对其所做的任何更改都将丢失返回(副本将被删除)。您可能需要考虑通过引用传递symptom

string yesno(string holder, vector<string>& symptom) // Pass by reference!
{
    //...

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 2019-09-09
    • 2019-12-30
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多