vector容器

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: vector容器

一,相较于普通数组的优点

vector相较于数组来讲更灵活(动态的数组)

二,vector支持随机存取,

三,为了降低空间配置的速度成倍,实际配置的大小可能比客户端的要大,以备将来可能的扩充。增加大小就是找一快新的空间,拷贝过去,释放原来的空间。(不是两倍的增长,它有自己的一套算法)

单端数组

就后面一个口是开着的



## 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<int>(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.去调用

目录
相关文章
|
6天前
|
存储 C++ 容器
如何将没有复制或移动构造函数的对象放入vector容器
如何将没有复制或移动构造函数的对象放入vector容器
16 0
|
2月前
|
存储 算法 编译器
8.STL中Vector容器的常见操作(附习题)
8.STL中Vector容器的常见操作(附习题)
|
2月前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)
24 1
|
2月前
|
存储 算法 C++
C++一分钟之-容器概览:vector, list, deque
【6月更文挑战第21天】STL中的`vector`是动态数组,适合随机访问,但插入删除非末尾元素较慢;`list`是双向链表,插入删除快但随机访问效率低;`deque`结合两者优点,支持快速双端操作。选择容器要考虑操作频率、内存占用和性能需求。注意预分配容量以减少`vector`的内存重分配,使用迭代器而非索引操作`list`,并利用`deque`的两端优势。理解容器内部机制和应用场景是优化C++程序的关键。
38 5
|
2月前
|
存储 算法 C++
【C++/STL】:vector容器的基本使用
【C++/STL】:vector容器的基本使用
23 1
|
1月前
|
存储 安全 C++
|
1月前
|
存储 算法 C++
【C++】详解STL容器之一的 vector
【C++】详解STL容器之一的 vector
|
2月前
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
60 0
|
2月前
|
算法 编译器 Linux
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
23 0
|
2月前
|
存储 缓存 C++
Vector容器介绍
Vector容器介绍