一、二维数组的创建(arr[5][6]=1)
方式①:
vector<vector<int>> vv1;
vv1.resize(5);
for (size_t i = 0; i < vv1.size(); ++i)
vv1[i].resize(6, 1);
方式②:
vector<vector<int>> vv2;
vv2.resize(5, vector<int>(6, 1));
方式③:
vector<vector<int>> vv3(5, vector<int>(6, 1));
二、简单应用(杨辉三角)
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> v(numRows);
for(int i = 0; i < numRows; i++)
{
// 每行填充i+1个1
v[i].resize(i+1, 1);
for(int j = 1; j < i; j++)
{
// 对非首列与非对角线元素初始化
v[i][j] = v[i-1][j] + v[i-1][j-1];
}
}
return v;
}
};
执行: vector<vector<int>> v(5);
开辟出5个空间,每个空间里存放着vector<int> 类型的元素
执行for循环,为每一行元素进行.resize(i+1, 1);操作
为每一行元素设置i+1个空间,并全赋值为1
以下为resize() 和 reserve() 容量控制函数
void resize(size_t newsize, T val = T())
{
size_t oldsize = size();
if (newsize > oldsize)
{
// 当新元素个数大于容量 进行扩容
size_t cap = capacity();
if (newsize > cap)
reserve(newsize);
for (size_t i = oldsize; i < newsize; ++i)
start[i] = val;
}
finish = start + newsize;
}
void reserve(size_t newcapacity)
{
size_t oldcap = capacity();
if (newcapacity > oldcap)
{
// 开辟新空间
T* temp = new T[newcapacity];
if (start)
{
// 拷贝元素
memcpy(temp, start, sizeof(T) * size());
// 释放旧空间
free(start);
}
// 提前保存元素个数 方便更新finish
size_t sz = size();
start = temp;
finish = start + sz;
endofstorage = start + newcapacity;
}
}
对比以下c语言解题:
int** generate(int row, int* returnSize, int** returnColumnSizes){
// 行等于列 第一列元素全为1;第i行i列全为1
int** arr = (int**)malloc(sizeof(int*) * row);
*returnSize = row;
*returnColumnSizes = malloc(sizeof(int)*row);
// for (int i = 0; i < row; i++)
// {
// *(arr + i) = (int*)malloc(sizeof(int) * row);
// }
int n = 1;
for (int i = 0; i < row; i++)
{
(*returnColumnSizes)[i] = n;
arr[i] = malloc(sizeof(int) * n);
arr[i][0] = arr[i][i] = 1;
for(int j = 1; j < i; j++)
{
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
n++;
}
return arr;
}