vector数组基本用法

  • Post author:
  • Post category:其他


  • 存储&访问
vector<vector<int> > matrix;
	for(int i=0;i<3;i++){
		vector<int> t;// vector不涉及指针的操作可以自己进行GC
		for(int j=0;j<4;j++){
			t.push_back(i*4+j);
		}
		matrix.push_back(t);
	}
	for(int i=0;i<3;i++){
		vector<int> t;
		for(int j=0;j<4;j++){
		cout<<matrix[i][j]<<" ";//良心访问方式
		}
		cout<<endl;
	}
  • 用vector实现stack(C++中stack在底层实现时就是对list和deque的再封装)
class Stack {
public:
    void push(int value) {
        arr.push_back(value);
        t = value; //记录新加元素
    }
    void pop() {
        arr.pop_back(); //vector容器弹出队尾元素
        t=arr.back(); //删除栈顶元素之后记得将t更改为新尾,vector容器返回队尾元素
    }
    int top() {
        return t;
    }
    int min() { //寻找栈中最小值
        int m = arr[0];
        for(int i=1;i<arr.size();i++){
            if(arr[i]<m) m = arr[i];
        }
        return m;
    }
private:
    vector<int> arr;
    int t;
};
  • 二叉树的深度遍历特定长度路径(根节点到叶节点)的记录排序
/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    vector<vector<int> > result;
    vector<int> t;
    static bool compare(vector<int> a,vector<int> b){
        if(a.size()>b.size()) return 1;
        return 0;
    }
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
         
        if(root==NULL) return result;
        
        dfs(root,expectNumber,t);
        
        sort(result.begin(),result.end(),compare);
        return result;
        
    }
private:
    
    void dfs(TreeNode* root,int expectNumber,vector<int> t){
        if(root==NULL) return ;
        t.push_back(root->val);
        expectNumber -= root->val;
        if(root->left==NULL&&root->right==NULL&&expectNumber==0){
            result.push_back(t);
        }
        dfs(root->right,expectNumber,t);
        dfs(root->left,expectNumber,t);
        t.pop_back();//回滚很重要
    }

};



版权声明:本文为keq_keq原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。