一,vector是什么?
vector是向量,一种顺序容器,可以存放任意类型数据的动态数组。
二,vector初始化:
1.vector<int> num=vector<int>();或者vector<int> num;
//这种情况下,num所占空间不确定,可以动态扩展!
2.vector<int> num(10);
//定义了10个int型元素的向量。初值不确定!
3.vector<int> num(10,1)
//定义了10个int型元素的向量,初值都为1!
4.vector<int> num(b);
//用b向量来初始化num向量,包括所占空间、每一个元素!
5.vector<int> num(b.begin(),b.begin()+3);
//定义了num值为b中从第0个开始连续的3个元素。即下标为0-2的元素!
6.int b[5]={1,2,3,4,5}; vector<int> num(b,b+5);
//用数组来初始化
7.vector<vector<int>> num;
//二维向量
三、vector增加元素:
int p=10;
num.push_back(p);
//将p添加到vector数组末端
num.push_front(p);
//将p添加到vector数组首端
num.insert(num.begin()+n,t);
//可以插入任何想插入的位置,将t插入到num.begin()+n
若用cin>>输入数据或者用下标方式ver[i]=t赋值,那vector必须有空间,可以用resize()赋空间或者直接用push_back(t)添加元素即可。
也可以初始化时用vector <int> ver(n);这样就可以cin>>输入数据或者用下标方式ver[i]=t赋值,但是这样就不可以用push_back(t)添加数据,因为push_back(t)是向末尾添加数据!!!而前n个默认为0,push_back(t)并不会修改前n个的值。
三、删:删除元素
ver.erase(iterator p);//删除迭代器p指向的位置的元素ver.erase(ver.begin()+1,ver.begin()+3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+ 3(不包括它)
前闭后开
ver.pop_back();//删除最后一个元素
ver.pop_front();//删除第一个元素四、改:修改元素
待补充ing……详情看总结部分五、查:遍历元素
//遍历元素可以有两种方法://1.下标遍历
for (int i = 0; i < n; i++)
cout << ver[i] << " ";
//2.迭代器遍历vector <int>::iterator p;
for(auto p=ver.begin();p!=ver.end();p++)
cout << *p << " ";
其中 auto代表 vector <int>::iterator(迭代器类型)
注意:*(p+1)== *(ver.begin()+1) == ver[i+1]总结
vector还包含着各种功能的函数,总结如下(部分):push_back() //在数组的最后添加一个数据
pop_back() //去掉数组的最后一个数据at() //得到编号位置的数据
begin() //得到数组头的指针
end() //得到数组的最后一个单元+1的指针
find() //判断元素是否存在front() //得到数组头的引用
back() //得到数组的最后一个单元的引用
max_size() //得到vector最大可以是多大
capacity() //当前vector分配的大小
size() //当前使用数据的大小
a.capacity(); //返回a在内存中总共可以容纳的元素个数
a.reserve(100); //改变当前vector所分配空间的大小将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100
a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值默认为0
a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值为2
erase() //删除指针指向的数据项
clear() //清空当前的vector
rbegin() //将vector反转后的开始指针返回(其实就是原来的end-1)
rend() //将vector反转构的结束指针返回(其实就是原来的begin-1)
empty() //判断vector是否为空
swap() //与另一个vector交换数据
a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换reverse(obj.begin(),obj.end());反向迭代器,实现元素对调
find(nums.begin(), nums.end(), target)//返回的是target第一次出现的地址,如果没有找到返回尾地址nums.end()sort(a.begin(),a.end(),cmp); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列 cmp可自定义,也可以没有(没有的话默认从小到大)
copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素。