【发布时间】:2017-10-10 17:58:43
【问题描述】:
我正在学习 C++ 中的递归,但一直被困在为什么不能简单地使用 .push_back() 而不是创建一个函数来复制 specific_previous_result 元素,然后是 .push_back()。
vector<vector<int>> get_every_n_elements(vector<int> arr, int n) {
if (n == 0) {
vector<vector<int>> result;
vector<int> empty_list;
result.push_back(empty_list);
return result;
}
vector<vector<int>> previous_result = get_every_n_elements(arr, n - 1);
vector<vector<int>> current_result; //empty
for (auto specific_previous_result : previous_result) { // [[]] -> []
for (auto elem : arr) { // [1,2,3,4] -> 1
//current_result.push_back(specific_previous_result.push_back(elem));
//This does not work^^
current_result.push_back(group(specific_previous_result, elem));
//The group function copies all elements to newVec and push_back(elem) after
//Then returns newVec with elem at the end
}
}
return current_result;
}
我在运行 push_back 行时得到的错误是 error: invalid use of void expression current_result.push_back(specific_previous_result.push_back(elem));。感谢您的帮助。
【问题讨论】:
-
即使它确实有效,它也会达到你的预期,因为
specific_previous_result是向量的副本,你需要for (auto& specific_previous_result : previous_result)来代替 -
那一行到底是什么意思?您正在尝试推送另一个
push_back的返回值,但push_back返回void
标签: c++ recursion vector 2d push-back