vector容器

一,相较于普通数组的优势
vector相较于数组来说更灵活(动态的数组)
二,vector支持随机存取,
三,为了下降空间配置的速度成倍,实际配置的大小可能比客户端的要大,以备未来可能的扩充。增长大小就是找一快新的空间,拷贝过去,释放原来的空间。(不是两倍的增加,它有本身的一套算法)
单端数组
就后面一个口是开着的
在这里插入图片描述web

vector初始化

vector<int>v2(10,100)   //把10个100放进去
 vector<int>v(v1);     //拷贝构造
vector<int>v3(v2.begin(),v2.end());   //拷贝v2进v3(v2的起始位置到结束位置)
例:int arr[]={1,2,3,4,5};vector<int>v5(arr,arr+sizeof(arr)/sizeof(int));
v4.assign(v3.begin(),v3.end())   //将[v.begin(),v.end())中的元素赋值进去

从新指定容器的长度 resize

v1.resize(10,1000)//第二个参数是默认填充的值,不写默认为0;
v1.resize(3)//超过3个的删掉,不足补0;

其余经常使用操做

v1.front();//第一个元素    v1.back();//最后一个元素
v1.insert(v1.begin(),2,100)//在begin()的位置插入2个100,当中第一个参数为迭代器,第二个参数能够省略
v1.pop_back();//尾删
v1.erase(v1.begin(),v1.end())//至关于v1.clear();清空
v4.swap(v5)   //v4与v5互换
v.empty()//判断是否为空
v.size()//求容器的大小
v.capacity()//v的容量(系统本身开辟的)
(vector<int>::reverse_iterator it=v.rbegin();it!=v.rend();it++)反向遍历
小技巧:it=it+1;能够用来判断容器的迭代器是否支持随机访问(指针加一就是地址的下一个位置,即在连续的地址中成立)

巧用swap收缩内存

例:若是v的大小为100000,其系统开辟的容量为130000多,这可能没有什么关系,但v.resize(3)后,大小变为3了,但容量仍是13万多,太浪费了,此时你可能须要把系统开辟的容量变小算法

v.resize(3);
vector<int>(v).swap(v);

此时v的大小与系统主动开辟的空间都变为3了。
分析:
vector(v)//利用拷贝构造初始匿名对象,假设该对象为x,则x开辟的大小为3,交换的本质为指针交换,即v指向了原先x的地方,从而将多余浪费的空间给解决了。
巧用reserve预留空间
若是自己知道它会插入多少,能够预留那么大空间,系统就不会每次开辟了,地址就稳定了。数组

count与count_if的用法

int times=count(v.begin(),v.end(),target);//目标元素在容器中出现了多少次。

bool compare(int score)
{
    return 90<score;
}
int times=count(v.begin(),v.end(),compare);//本身写的一个函数,为真就是知足题意
v是什么类型,函数的参数就是什么类型,由于是把v中元素拿出去比较
//因为它们不是vector的类函数,故不要用v.去调用

本文分享 CSDN - 希境。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。svg

相关文章
相关标签/搜索