@Crystal
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]
(1)下标声明不能直接 int l=nums.begin() ,r=nums.end();应该是vector::iterator l=nums.begin(), r =nums.end(); (2)下标可做比较运算< ,<= ,> ,>=,!=但是不能做四则运算 mid=(l+r)/2
reserve()只修改capacity大小,不修改size大小, resize()既修改capacity大小,也修改size大小。 resize既分配了空间,也创建了对象。
指定区间 [ beg,end ] 逆序**(闭区间)**
追加
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;头插 指定位置pos插入 第一个参数必须是v.begin()+pos 不能直接是pos(pos为int型)
指定位置pos插入区间[ beg,end )内的元素 (半开半闭) pos beg end 都是vector::iterator类型 如 insert(v1.begin(),v2.begin(),v2.end())
指定位置pos删除 参数必须是v.begin()+pos 不能直接是pos(pos为int型)
二维数组的创建vector / C / C++的区别
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