空值不应该被忽略(试图将空赋给非空变量?)

时间:2018-06-29 22:18:07

标签: c++

vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
        int row = nums.size();
        int col = nums[0].size();
        vector<vector<int>> newNums;
        if((row*col) < (r*c)){
            return nums;
        }
        else{
            deque<int> storage;
            for(int i = 0; i < row; i++){
                for(int k = 0; k < col; k++){
                    storage.push_back(nums[i][k]);
                }
            }
            for(int j = 0; j < r; j++){
                for(int l = 0; l < c; l++){
                    newNums[j][l] = storage.pop_front();
                }
            }
        }
        return newNums;
    }

伙计们,我遇到了一个问题,我说的是标题上方的错误“无效值不应被忽略”。当我查找错误消息时,提示为”,这是一条GCC错误消息,表示函数的返回值为'void',但您正在尝试将其分配给非void变量。您不允许将void分配给整数或任何其他类型。” 阅读此内容后,我认为自己的双端队列没有被填充。但是,我无法找出为什么我的双端队列没有被填充。如果你们想知道我要解决的问题,我将在下面发布。另外,我无法通过调试器运行它,因为它不会编译:(。预先感谢。

  

在MATLAB中,有一个非常有用的函数,称为“重塑”,可以将矩阵重塑为具有不同大小的新矩阵,但保留其原始数据。

     

您将获得一个由二维数组表示的矩阵,以及两个正整数r和c,分别代表所需的重构矩阵的行号和列号。

     

重塑后的矩阵需要以与原始矩阵相同的行遍历顺序填充原始矩阵的所有元素。

     

如果具有给定参数的“重塑”操作可行且合法,则输出新的重塑矩阵;否则,输出原始矩阵。

   Example 1:
    Input: 
    nums = 
    [[1,2],
     [3,4]]
    r = 1, c = 4
    Output: 
    [[1,2,3,4]]
    Explanation:
    The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.

1 个答案:

答案 0 :(得分:0)

此行有两个问题:

newNums[j][l] = storage.pop_front();

首先,pop_front()不返回被弹出的元素。要获取双端队列的第一个元素,请使用storage[0]。然后调用pop_front()将其删除。

您还无法分配给newNums[j][i],因为尚未分配矢量的那些元素。您可以通过这样声明它来预分配所有内存。

vector<vector<int>> newNums(r, vector<int>(c));

因此,以上行应替换为:

newNums[j][l] = storage[0];
storage.pop_front();