在使用vector二维数组时,产生 vector subscript out of range 错误,检查之

后并没有发现数组下标越界问题,百度了一下,发现原来是数组并没有初始化

赋值,没有分配空间,所以不能采用下标的方式进行访问。

解决方法有两个,一个是初始化数组的时候为其分配空间,其值全部赋值为0。

vector<vector<int> > myvec(n, vector<int>(n, 0));

另一个就是使用 vector.push_back 添加元素,不使用下标访问赋值的方式。

下面是出问题的程序:

//构造杨辉三角
class Solution {
public:
	vector<vector<int>> generate(int numRows) {
		vector<vector<int>> res(numRows);
		if (numRows < 1) return res;
		for (int i = 0; i < numRows; i++)
		{
			for (int j = 0; j <= i; j++)
			{
				if (j == 0 || j == i)
					res[i][j] = 1;
				else
					res[i][j] = res[i - 1][j - 1] + res[i - 1][j];
			}
		}
		return res;
	}
};

采用 vector.push_back 的方式解决了问题。

//构造杨辉三角
class Solution {
public:
	vector<vector<int>> generate(int numRows) {
		vector<vector<int>> res(numRows);
		if (numRows < 1) return res;
		for (int i = 0; i < numRows; i++)
		{
			for (int j = 0; j <= i; j++)
			{
				if (j == 0 || j == i)
					res[i].push_back(1);
				else
					res[i].push_back(res[i - 1][j - 1] + res[i - 1][j]);
			}
		}
		return res;
	}
};
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐