自学内容网 自学内容网

杨辉三角中, reserve开空间问题

今天去写了一道题"杨辉三角", 结果一调用 reserve 就报错. 这很奇怪, 后来老师做了回复, 下面来简单记录一下:

问题场景

#include<iostream>
#include<vector>
using namespace std;

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> ret;

        // 开空间
        ret.reserve(numRows);
        for (int i = 0; i < numRows; i++)
        {
            ret[i].reserve(i + 1);
        }

        // 赋值
        for (int i = 0; i < numRows; i++)
        {
            for (int j = 0; j <= i; j++)
            {
                if (j == 0) ret[i][j] = 1;
                else if (i == j) ret[i][j] = 1;
                else ret[i][j] = ret[i - 1][j - 1] + ret[i - 1][j];
            }
        }

        return ret;
    }
};

int main()
{
    Solution s;
    s.generate(5);

    return 0;
}

原因

ret[i].reserve(i + 1);中的 ret[i]是不合法的. 因为只有空间, 而里面没有vector的地址

修改

解决: 换成 resize. 
class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> ret;

        // 开空间
        ret.resize(numRows);
        for (int i = 0; i < numRows; i++)
        {
            ret[i].resize(i + 1);
        }

        // 赋值
        for (int i = 0; i < numRows; i++)
        {
            for (int j = 0; j <= i; j++)
            {
                if (j == 0) ret[i][j] = 1;
                else if (i == j) ret[i][j] = 1;
                else ret[i][j] = ret[i - 1][j - 1] + ret[i - 1][j];
            }
        }

        return ret;
    }
};

int main()
{
    Solution s;
    s.generate(5);

    return 0;
}

EOF.


原文地址:https://blog.csdn.net/2302_79031646/article/details/144312364

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!