vector

vector(向量)是一个封装了动态数组大小的顺序容器。顺序容器中的元素按照严格的线性顺序排序,可以通过元素在序列中的位置访问对应的元素,支持数组表示法和随机访问。使用vector事需要引入头文件#include<vector>。

  1. 创建 

vector<int>a;    //创建一个空的vector,数据类型为int,数组名为a
vector<int>a(100);    //创建一个vector,数组名为a,元素个数为100,所有数初值为0
vector<int>a(10,666);    //创建一个vector,数组名为a,元素个数为10,所有数初值为666
vector<int>b(a);    //b是a的复制
vector<int>b(a.begin()+3,a.end()-3);    //复制[a.begin()+3,a.end()-3)区间的元素到vector中


vector<int>a[5];    //相当于创建了5个vrctor,每个都是一个数组

赋值

vector<int>a(10);
for(int i=0;i<10;i++)
    a[i]=i;
//vector<int>b;
//b=a;
//b.assign(a.begin(),a.end());
//b.assign(10,100);
vector<int>b(a);
vector<int>c(a.begin()+3,a.end()-3);
cout<<*(a.end()-1)<<endl;
for(int i=0;i<b.size();i++)
    cout<<b[i]<<" ";
cout<<endl;
for(int i=0;i<c.size();i++)
    cout<<c[i]<<" ";
cout<<endl;
输出如下:

9
0 1 2 3 4 5 6 7 8 9
3 4 5 6

2.增加。向vector中添加元素,可以从尾部添加,也可以从中间添加。需要注意:从中间插入时需要将插入位置之后的所有元素后移,时间复杂度为O(n),效率较低。

它的动态扩展机制不是往后面接新空间,而是开辟一个更大的空间,把它放进去。

a.push_back(5);    //在向量尾部增加一个元素5
a.insert(a.begin()+1,10);    //在a.begin()+1指向元素前插入一个10
a.insert(a.begin()+1,5,10);    //在a.begin()+1指向元素前插入5个10
a.insert(a.begin()+1,b.begin(),b.begin()+3);    //在a.begin()+1指向元素前插入b向量的区间元素

 3.删除。可以删除尾部元素、指定位置的元素、区间,还可以清空整个向量。

a.pop_back();        //删除向量中的最后一个元素
a.erase(a.begin()+1);    //删除指定位置的元素
a.erase(a.begin()+3,a.end()-3);    //删除区间[first,last)中的元素
a.clear();        //清空向量

4.遍历。 可以用数组表示法,也可以用迭代器对向量元素进行访问。

for(int i=0;i<a.size();i++)
    cout<<a[i]<<" ";
cout<<endl;
for(vector<int>::iterator it=a.begin();it<a.end();it++)
    cout<<*it<<" ";

5.改变向量的大小。resize可以改变当前向量的大小,如果它比当前向量大,则填充默认值;如果比当前向量小,则舍弃后面的部分。

但是不改变capacity();

a.resize(5);    //设置向量的大小为5,默认填充值为0
a.resize(5,15);//设置向量的大小为5,默认填充值为15

6.查找函数

find(a.begin(),a.end(),x)  从first到last找x,如果找到返回位置,没找到则返回值为a.end()

vector<int>::iterator it=find(a.begin(),a.end(),4);
if(it!=a.end())
	cout<<it-a.begin()<<endl;
else
	cout<<-1<<endl;

7.交换函数swap

巧用可以释放多余空间

vector<int>a;
for(int i=1;i<=10000;i++)
{
    	a.push_back(i);
}
cout<<a.capacity()<<endl;
cout<<a.size()<<endl;
    
a.resize(3);
cout<<a.capacity()<<endl;
cout<<a.size()<<endl;
    
    
vector<int>(a).swap(a);//先以a的大小构造一个匿名对象,它的容量和大小都是3
//在将匿名对象和a交换,同时在当前行执行结束以后匿名对象被销毁 
cout<<a.capacity()<<endl;
cout<<a.size()<<endl;    

8.预留空间(减少动态扩展容量次数)

reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问

vector<int>a;

cout<<a.capacity()<<endl;
cout<<a.size()<<endl;

for(int i=1;i<=10000;i++)
{
	a.push_back(i);
}
a.reserve(30000);
cout<<a.capacity()<<endl;
cout<<a.size()<<endl;

a.reserve(3);
cout<<a.capacity()<<endl;
cout<<a.size()<<endl;

但是注意只扩大不缩小

9.数据存取

  • at(int idx)  //返回下标idx所指的数据
  • 用[]直接输出 

10.排序 

sort(d.begin(),a.end()); 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值