如何将vector传入函数并将处理后的整组vector返回至main函数
问题核心错误点
- 你的
multif函数当前设置了int类型返回值,且在循环第一次执行时就触发return catcher[i];,直接终止了函数运行,只会修改第一个元素就返回,根本走不完整个循环。 - 你给
multif传入的是std::vector<int>&(左值引用),函数内对catcher的所有修改都是直接作用在main函数里的原varray对象上,本来就不需要额外做返回操作,调用完multif(varray)之后varray已经是处理后的结果。 - main函数末尾的
std::cout << multif << std::endl;逻辑完全错误,multif是函数名,你需要遍历处理后的varray输出每个元素。
修正后代码
修正后的multif函数
// 不需要返回值,因为引用已经直接修改原对象,所以返回值设为void即可 void multif(std::vector<int> &catcher) { printf("\nThe array numbers are: "); for (int i = 0; i < catcher.size(); i++) { catcher[i]*=2; printf("%d\t", catcher[i]); } }
修正后的main函数
int main() { std::vector <int> varray; while(true) { int input; if (std::cin >> input) { varray.push_back(input); } else { break; } } // 调用后varray已经是所有元素乘2的结果 multif(varray); // 遍历输出处理后的varray std::cout << "\n处理后的数组元素:" << std::endl; for (int num : varray) { std::cout << num << "\t"; } std::cout << std::endl; return 0; }
可选方案:显式返回vector的写法
如果你确实需要函数返回处理后的vector,可以按如下方式修改,不过这种场景下用引用修改原对象开销更低,没有必要额外做返回:
std::vector<int> multif(std::vector<int> catcher) // 这里直接传值,内部修改副本后返回 { for (int i = 0; i < catcher.size(); i++) { catcher[i]*=2; } return catcher; } // main中调用方式改为: varray = multif(varray);
内容的提问来源于stack exchange,提问作者DunPushSoHard
相关产品推荐
相关产品推荐

