我应该使用哪种函数数据类型返回vector.push_back?

问题描述

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

解决方法

std::vector.push_back()函数的返回类型为void,所以没有办法,您可以将其返回的值转换为任何类型(因为它什么也不会返回)。

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

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();
}

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

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