標籤:vector c++ stl 數組
最近在leetcode上面做題,STL的vector用的甚多,這裡稍微的總結下vector的一些常用方法,包括一維的和二維的,暫時能想到的就給記下了。
一維vector
建立一維vector:
vector<int> nums;//不指定長度vector<int> nums(n); // 指定長度為n
添加元素
nums.push_back(1);//直接從數組末端添加nums[i] = 1;//直接賦值給第i個位置
刪除元素
nums.resize(nums.size-i); //直接將數組長度減小,某種方式上刪掉了後面i個nums.pop_back();//刪掉最後一個元素
數組遍曆
for(int i = 0; i < nums.size(); i++){ cout<<nums[i]<<endl;}
其他
獲得長度:nums.size()
排序(O(nlogn)):sort(nums.begin(),nums.end());
翻轉:reverse(nums.begin(), nums.end());
合并兩個vector:合并nums1和nums2,並將合并後的數組賦值給nums
vector<int> nums1(m),nums2(n);vector<int> nums;nums.resize(m+n);merge(nums1.begin(), nums1.end(),nums2.begin(),nums2.end(),nums);
二維vector
建立m*n的二維vector: 直接定義
vector<vector <int> > nums(m ,vector<int>(n)); //m*n的二維vector
動態建立m*n的二維vector
方法一:
vector<vector <int> > nums;nums.resize(m);for(int i=0;i<m;i++) nums[i].resize(n);
方法二:
vector<vector <int> > nums;nums.resize(m,vector<int>(n));
動態建立二維數組nums[m][n]
C語言版:
#include<malloc.h>int **a=(int **)malloc(m*sizeof(int *));for(int i=0;i<m;i++)a[i]=(int *)malloc(n*sizeof(int));
C++版:
int **nums=new int*[m];for(int i=0;i<m;i++) nums[i]=new int[n];
初始化二維數組
vector<vector <int> > nums(m ,vector<int>(n,0)); //m*n的二維vector,所有元素為0
獲得二維數組的行數:nums.size();
獲得二維數組的列數:nums[0].size()
數組遍曆
int m = nums.size(),n = nums[0].size();for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ cout<<nums[i][j]<<endl; }}
C++ vector用法小記