为什么不能在 2D 矢量中 push_back? C++
Why cant you push_back in 2D vector? c++
我正在学习 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));
。谢谢你的帮助。
在 push_back
之后 return 向量本身似乎没有正当理由。有时它很有用,但大多数时候没有用。我建议将它写成两行,这在 IMO 中也比单独的(而且效率低下!)函数更清晰:
current_result.push_back(specific_previous_result);
current_result.back().push_back(elem);
该行导致编译器给您 invalid use of void expression current_result.push_back(specific_previous_result.push_back(elem));
错误的原因很简单。查看有问题的行:
current_result.push_back(
specific_previous_result.push_back(elem));
粗体部分调用向量的 push_back
函数,该函数具有 void
return 类型。您正试图将此 void
return 值作为参数传递给 current_result.push_back
。
See the documentation for std::vector::push_back
. 如您所见,两个重载的 return 值为 void
.
你自己说了,你的 group
函数是 returning 一个向量 然后你把它推到你的 current_result
向量。这就是编译使用 group
函数的行的原因。
我正在学习 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));
。谢谢你的帮助。
在 push_back
之后 return 向量本身似乎没有正当理由。有时它很有用,但大多数时候没有用。我建议将它写成两行,这在 IMO 中也比单独的(而且效率低下!)函数更清晰:
current_result.push_back(specific_previous_result);
current_result.back().push_back(elem);
该行导致编译器给您 invalid use of void expression current_result.push_back(specific_previous_result.push_back(elem));
错误的原因很简单。查看有问题的行:
current_result.push_back(
specific_previous_result.push_back(elem));
粗体部分调用向量的 push_back
函数,该函数具有 void
return 类型。您正试图将此 void
return 值作为参数传递给 current_result.push_back
。
See the documentation for std::vector::push_back
. 如您所见,两个重载的 return 值为 void
.
你自己说了,你的 group
函数是 returning 一个向量 然后你把它推到你的 current_result
向量。这就是编译使用 group
函数的行的原因。