杨辉三角中, 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)!