为什么你不能在2D矢量中推回? C ++

时间:2017-10-10 17:58:44

标签: c++ recursion vector 2d push-back

我正在学习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));。谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

似乎不是在push_back之后返回向量本身的正当理由。有时它很有用,但大部分时间都不是。我建议将它写成两行,这也比单独的(效率低下的!)函数更清晰:

current_result.push_back(specific_previous_result);
current_result.back().push_back(elem);

答案 1 :(得分:3)

该行导致编译器给出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返回类型。您正试图将此void返回值作为参数传递给current_result.push_back

See the documentation for std::vector::push_back.正如您所看到的,两个重载的返回值都是void

您自己说过,group函数返回一个向量,然后您将其推到current_result向量的背面。这就是使用group函数的行编译的原因。