vector

一,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的位置(包括它)开始复制,覆盖掉原有元素。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

try again!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值