二维vector的初始化方法总结
初始化一个 二维vector,行M,列N学会用大括号初始化二维数组初始化一个 二维vector,行M,列不固定初始化一个二维vector,行列都不固定注意初始化二维vector为空时的情况leetcode例题1leetcode例题2
以定义一个二维整形数组并初始化为例:
初始化一个 二维vector,行M,列N
// 初始化一个 二维的matrix, 行M,列N,且值为0
vector
//等价于下面的
vector
for(int i=0;i matrix[i].resize(N); } //等价于下面的 vector< vector matrix.resize(M);//M行 for(int i=0;i matrix[i].resize(N);//每一行都是N列 } // 初始化一个 二维的matrix, 行M,列N,且值自定义为data; vector 学会用大括号初始化二维数组 //初始化空的二维vector,到底是{}还是{{}},请看最下面的两个leetcode例题 vector 或者 vector //初始化列表 vector matrix1.push_back({ 1,2,1 });//插入 初始化一个 二维vector,行M,列不固定 vector int col; vector for(int i=0;i cout<<”please input the col of ”<
cin>>col;//确定第i行的列数 cout<
for(int j=0;j int data; cin>>data; temp.push_back(data); } matrix[i]=temp; temp.clear(); } 初始化一个二维vector,行列都不固定 #include #include using namespace std; int main() { vector cout << "please input rows of matrix: " << endl; int rows; cin >> rows; matrix.resize(rows); int col; vector for (int i = 0; i < rows; i++) { cout << "please input the cols of " << i << "th row" << endl; cin >> col;//确定第i行的列数 cout << i << "th row has " << col << " cols," << "please input these" << endl; for (int j = 0; j < col; j++){ int data; cin >> data; temp.push_back(data); } matrix[i] = temp; temp.clear(); } cout << "output matrix:" << endl; for (int i = 0; i < matrix.size(); i++) { for (int j = 0; j < matrix[i].size(); j++) { cout << matrix[i][j] << " "; } cout << endl; } cout << endl; return 0; } 测试结果如下: 注意初始化二维vector为空时的情况 leetcode例题1 118.杨辉三角 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] class Solution { public: vector //学会用大括号初始化二维数组 if(numRows==0) return{}; if(numRows==1) return{{1}}; if(numRows==2) return{{1},{1,1}}; vector ans[0]={1}; ans[1]={{1},{1}}; vector for(int i=3;i<=numRows;i++){ temp.push_back(1); for(int j=0;j temp.push_back(ans[i-2][j]+ans[i-2][j+1]); } temp.push_back(1); ans[i-1]=temp; temp.clear(); } return ans; } }; leetcode例题2 前面一题返回空的二维vector时,返回的是{} 但是今天遇到一个题,在返回空的二维vector时,必须返回{{}} 题目记录如下: 面试题 08.04. 幂集 幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。 说明:解集不能包含重复的子集。 示例: 解题思路: 1.递归, 2.回溯 这里只讲递归的解法: subsets([1,2,3])={[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]} subsets([1,2])={[],[1],[2],[1,2]} 可以发现 subsets([1,2,3])=subsets([1,2]) + subsets([1,2])中的每一个子集中插入3 vector int N=nums.size(); //注意这里必须返回{{}},不能是{} if(N==0) return{{}}; int tail=nums.back(); nums.pop_back(); //递归 vector //注意nums是引用,所以在底层递归向上层递归返回时,要恢复删除的尾部元素 nums.push_back(tail); vector for(auto& i:sub){ i.push_back(tail); res.push_back(i); } return res; } 这里只想关注一个点,针对这一题,当nums.size()==0时,我们返回空的二维vector,必须是 {{}} 由上面两个例题可以看出,对于空的二维vector,可能是用{}初始化,也可能是用{{}}初始化,具体用哪一种,得看一下题目在返回空的二维vector时,要求返回的是啥, 如果题目在返回空的二维vector时,返回的是 [],这是我们程序中对应用{};如果题目在返回空的二维vector时,返回的是 [[]],这是我们程序中对应用{{}};