我对C ++ /编码比较陌生,我正在为CS2做最后的项目。我正在尝试设计一个“食谱计算器”,它将采用3种成分(进入载体),然后在食谱数据库中搜索潜在的食谱。
目前,我正在努力解决一些基础问题,当我调用初始化矢量的函数时,它不会再在主函数中输出成分。 当我尝试在实际函数内输出向量时,它可以工作。但我想确保相同的矢量保存在主要的“ingreds”中。
int main()
{
int y;
cout << "Hello! Welcome to Abby's Recipe Calculator." << endl << endl;
cout << "Please select an option: 1 to search by ingredient or 2 to browse recipes..." << endl;
cin >> y;
vector <string> ingreds;
ingreds.reserve(4);
if (y == 1)
{
ingredientvector(ingreds);
for (int i = 0; i < ingreds.size(); i++)
{
std::cout << ingreds[i];
}
}
//else if (y == 2)
//{
//call recipe function...
//}
system("pause");
return 0;
}
vector<string> ingredientvector(vector<string> x)
{
cout << "SEARCH BY INGREDIENT" << endl;
cout << "Please enter up to three ingredients... " << endl;
for (int i = 0; i < 4; i++)
{
x.push_back(" ");
getline(cin, x[i]);
if (x[i] == "1")
{
break;
}
}
return x;
}
答案 0 :(得分:1)
替换
vector<string> ingredientvector(vector<string> x)
通过
void ingredientvector(vector<string>& x)
请勿在{{1}}结束时返回x
。通过引用(ingredientvector
)传递,对象可以直接由函数修改。
注意:如果您执行了以下操作,您的代码可能有效:
&
否则,ingreds = ingredientvector(ingreds);
中的本地x
变量已填充,但对ingredientvector
没有影响,因为它是通过副本传递的(ingreds
是x
的本地副本1 {} ingreds
内。 ingredientvector
仅在ingreds
返回x
然后受ingredientvector
影响后才会受到影响。
但是通过引用传递变量绝对是正确的方法。
答案 1 :(得分:0)
返回值时,默认情况下按值返回:
std::vector<string> ingredientvector()
{
std::cout << "SEARCH BY INGREDIENT" << std::endl;
std::cout << "Please enter up to three ingredients... " << std::endl;
std::vector<string> x;
x.reserve(4);
for (int i = 0; i < 4; i++)
{
x.push_back(" ");
getline(cin, x[i]);
if (x[i] == "1")
{
break;
}
}
return x;
}
像这样使用:
if (y == 1)
{
const auto ingreds=ingredientvector();
for (const auto& this_ingred : ingreds)
{
std::cout << this_ingred << " ";
}
}