思路
1.新建一个vector的vector
2.先把空间开出来,然后再把里面的值给一个个修改
开空间的手段:new、构造函数、reserve、resize
因为我们之后要修改里面的数据,这就意味着我们需要去读取这个数据并修改,
如果用reserve的话,我们就仅仅是把空间给开出来了,但是里面是没办法访问的,因为我们此时的size为0,相当于此时的数组只有0个数据,我们就不能修改 arr[ 1 ] 等值;所以我们需要能够读取
当我们用resize的时候,相当于我们做了int arr[ 10 ];此时里面的是个元素虽然是随机值,但是起码是可以修改了
resize:开n个空间,可以放初始值
构造函数:第二个重载支持创建多个vector和初始化
这样也是可以的,也能做到初始化后的随意修改,以下内容我们用的是resize,结尾有构造函数的实现方式
3.我们要开多大的空间呢?
对于这个二维数组来说,我们要开的空间是能够放下多少行一维数组,而一维数组要开的空间是等差递增的
所以:
行:对于vector<vector<int>>,我们开numRows个空间放numRows个vector<int>数组
列:对于vector<int>,我们第一行开一个,第二行开两个,以此类推
因为杨辉三角第一个和最后一个是1,所以可以在这里顺便处理初始化的值,但是这里并不方便处理其他位置的值,
4.修改的是每个vector<int>的值
因为我们前面已经把那些值为1的位置给赋值了,所以现在就可以直接把那些是初始值的位置给按照杨辉三角的规则来修改值了(就是因为我们用的是resize,所以我们现在可以随便进行修改值)
5.返回对应的值
,要求我们返回那个二维数组,所以我们就直接返回
最终整合:
用resize来解决的
用构造函数来解决的
(以下的注释:原本打算把swap的地方直接用匿名对象作为函数参数,但是swap的交换参数是vector&,引用一个生命周期)