vector初始化
vector <int> v //没有开辟空间 size为0
这种方式下赋初值应用push_back, 不能直接v[ i ]=val
如 v.push_back(vector <int>(5,1) //初始化为5个1
vector <int> v(v1) 等价于 vector v=v1 //v1的拷贝
vector <int> v(n) //初始为n 个缺省val值0(已开辟空间)
vector <int> v(n,val) //初始化为n个相同val值(已开辟空间)
vector <int> v(v1.beg , v1.end) //获取一段序列闭区间 [ beg,end]
vector 下标问题
(1)下标声明不能直接
int l=nums.begin() ,r=nums.end();应该是vector::iterator l=nums.begin(),
r =nums.end();
(2)下标可做比较运算< ,<= ,> ,>=,!=但是不能做四则运算 mid=(l+r)/2
resize reverse
reserve()只修改capacity大小,不修改size大小,
resize()既修改capacity大小,也修改size大小。
resize既分配了空间,也创建了对象。
reverse(beg,end)
指定区间 [ beg,end ] 逆序**(闭区间)**
push_back(val)
追加
查找vector里面是否有特定的某个值val
find(first,end,val)
first,end是迭代器类型
注意是单独调用ifind函数,不是v.find()
查找是否有5这个元素
vector<int>::iterator it;
it = find(v.begin(), v.end(), 5);
if (it == v.end())
cout << "没有找到指定元素" << endl;
else
cout << "找到指定元素" << endl;
insert(v.begin(),val)
头插
指定位置pos插入 第一个参数必须是v.begin()+pos 不能直接是pos(pos为int型)
insert(pos,beg,end)
指定位置pos插入区间[ beg,end )内的元素 (半开半闭) pos beg end 都是vector::iterator类型 如
insert(v1.begin(),v2.begin(),v2.end())
erase(v.begin()+pos)
指定位置pos删除
参数必须是v.begin()+pos 不能直接是pos(pos为int型)
vector<vector <int> > ivec(m ,vector<int>(n)); m*n的二维vector
动态创建m*n的二维vector
方法一:
vector<vector <int> > ivec;
ivec.resize(m);
for(int i=0;i<m;i++) ivec[i].resize(n);
方法二:
vector<vector <int> > ivec;
ivec.resize(m,vector<int>(n));
动态创建二维数组a[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 **a=new int*[m];
for(int i=0;i<m;i++) a[i]=new int[n];
初始化二维数组
vector<vector <int> > ivec(m ,vector<int>(n,0)); //m*n的二维vector,所有元素为0