1. xxx.emplace_back( )功能:
该函数是 C++ 11 新增加的,其功能和 push_back() 相同,都是在 vector 容器的尾部添加一个元素。
应用场景:
1.将用链表存储的线性表转化为用数组存储的线性表。leetcode.234 回文链表 法一。
2. xxx.size( )功能:
计算vector向量中的元素数量
3. 二维vector( )与下标的使用:
二维向量相当于二维数组。
1.使用vector (vector v); 声明一个容器v时,如果没有给他预定存储空间,则可以直接使用v.push_back(x)插入变量x,那么插入的第一个元素可以用v[0]访问到。
2.vector没有分配空间则不能直接通过下标赋值和访问。
3.初始化时没有分配空间(因为不知道需要分配多大):vector (vector v),后面需要动态分配空间时(为了能通过下标访问),则需要通过push_back()手动分配:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
recursion(root,result,0); //从0层开始,因为时使用数组离开存储的
return result;
}
void recursion(TreeNode *root,vector<vector<int>> &res,int depth){
if(root==nullptr)
return;
if(depth>=res.size()){
res.push_back(vector<int>()); //二维的vector的元素室一维数组,插入新元素是插入一个一维数组。因此需要扩充二维vector容量。只有这样才能够使用res[x];
}
res[depth].push_back(root->val);
recursion(root->left,res,depth+1);
recursion(root->right,res,depth+1);
//res[depth].push_back(root->val); 放在第30行和第33行在bfs中没有影响
}
};
参考文章:https://lishizheng.blog.youkuaiyun.com/article/details/105862560?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link