怎么在C++中使用vector顺序容器-创新互联

今天就跟大家聊聊有关怎么在C++中使用vector顺序容器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

成都创新互联公司专注于鱼台企业网站建设,响应式网站设计,商城建设。鱼台网站建设公司,为鱼台等地区提供建站服务。全流程定制网站设计,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务

一、特点

①总的来说:可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢
②元素保存在连续的内存空间中,因此通过下标取值非常快
③在容器中间位置添加或删除元素非常耗时
④一旦内从重分配,和原vector相关的指针,引用,迭代器都失效。内存重分配耗时很长

二、头文件、using声明

  • 头文件:#include <vector>

  • using声明:using std::vector;

三、初始化

  • vector<T>  v1; ==>v1是一个空的vector

  • vector<T> v2(v1); ===>v2是v1的副本,拷贝构造

  • vector<T> v2=v1; ===>同上

  • vector<T> v1(n,val); ===>初始化n个value

  • vector<T> v1(iter1,iter2); ===>用迭代器iter1与iter2所指的区间内元素进行初始化

  • vector<T> v1(n); ===>初始化n个元素,每个元素使用默认值(int为0,string为空...)

  • vector<T> v1{a,b,c...}; ===>用元素a,b,c进行初始化

  • vector<T> v1={a,b,c...}; ===>同上

四、相关操作

1.运算符

v1==v2;//判断v1和v2是否相等
v1!=v2;//判断v1和v2是否相等
>、>=、<、<= //以字典顺序进行比较

2.取值

索引取值:v[0],v[1],v[2]....

五、相关函数

vector不支持push_front()和emplace_front()

v.empty();//判断是否为空,返回布尔值
v.size();//返回容器中的元素个数
v.max_size();//返回容器的容量
v.front();//得到头元素
v.back();//得到尾元素
v.at(int i);//得到下标i处的元素,若下标越界,会抛出异常
v1.swap(v2);//将v1和v2进行交换。容器的成员函数版本
swap(v1,v2);//同上。系统函数版本
 
assign(iter1,iter2);//将容器元素更换为一个迭代器的区间元素
assign(n,t);//将容器元素变为n个t元素
v.insert(iter,t);//在迭代器iter处插入t。返回所插位置处的迭代器
v.insert(v.end(),10,t);//在容器v的末尾插入10个元素,每个元素都是t。返回新添加元素的第一个元素的迭代器
v.insert(v.end(),{"a","b"...});//将后面花括号的每个元素插入容器v的尾部。返回新添加元素的第一个元素的迭代器
v.insert(v.begin(),v2.end()-2,v2.end());//将容器v2的最后两个元素插入容器v的头部。返回新添加元素的第一个元素的迭代器
注意:上面这个用法,后面两个参数不能为自身容器的范围(v.insert(v.begin(),v.end()-2,v.end());是错误的)
 
 
//利用insert的返回值,下面代码为一直在lst容器的头部插入元素(类似于push_front的功能)
vector<string> v;
auto iter=lst.begin();
while(cin>> word)
 iter=v.insert(iter,word);//insert函数每回执行完,返回容器的首元素位置
//vector不支持pop_front
 
v.push_back(t);//尾部追加元素t
v.pop_back();//删除尾元素
 
v.earse(iter);//删除迭代器iter所指位置处的元素。返回删除位置处后一个元素迭代器
v.erase(iter1,iter2);//删除迭代器iter1与iter2区间内的元素。返回删除最后一个元素的后一个元素迭代器
 
v.clear();//清空容器,重新初始化容器
v.resize(n);//将容器v的元素变为n个。若n<原始元素个数,删除多于元素。若n>原始元素个数,则用默认初始值初始化容器
v.resize(n,t);//将容器元素变为n个t。与容器原始个数无关
 
vector<int> v(5,666);
v.resize(3);//v内有3个元素,都是666
v.resize(8);;//v内有8个元素,前5个个是666,后3个都是0(默认)
v.resize(10,666);//v内有10个元素,都是666
//vector不支持emplace_front();
//下面的两个函数,是在内存中创建一个对象,然后添加进相应的位置
v.empalce(iter,args);//在容器v的位置添加创建一个args对象
v.emplace_back(args);//在容器v的尾部添加创建一个args对象
 
例如
class A{
 string name;int age;
public:
 A(string name, int age);
};
int main()
{
 vector<A> v;
 v.emplace_back("C语言", 18);//在尾部创建一个元素
 v.emplace(v.begin(),"C++",18);//在容器v的头部添加一个元素
}
v.capacity();//返回当前容器的容量(总共能存多少个)
v.reserve(n);//为容器v重新分配n个内存空间(如果n<=当前容器大小,则什么都不做)

六、容器操作使迭代器、引用、指针失效

1.概念:向容器中添加或者删除元素可能会使容器的迭代器、引用、指针失效。失效的迭代器、引用、指针不再表示任何元素,使用起来非常危险

2.添加元素

  • 如果vector没有内存重分配。插入位置之前的元素的迭代器、引用、指针有效,插入位置之后的迭代器、引用、指针都失效

  • 如果内存重分配,则所有的迭代器、引用、指针都失效

3.删除元素

删除元素之前的迭代器、引用、指针有效,之后的失效

七、vector是如何增长的

1.概念

vector是可变长的数组,当向其中增加元素时,如果空间已满,回自动申请一个新的空间,并将原来的空间释放,使指向原来空间的指针指向于新空间

2.方法:vector增长是有规律的,可以通过一个公式描述

  • maxSize=maxSize+((maxSize>>1)>1?(maxSize>>1):1)

  • 图解:就是由1、2、3、4、6、9...依次增长

怎么在C++中使用vector顺序容器

看完上述内容,你们对怎么在C++中使用vector顺序容器有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联网站建设公司行业资讯频道,感谢大家的支持。

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

分享题目:怎么在C++中使用vector顺序容器-创新互联
网页URL:https://www.cdcxhl.com/article44/dhejhe.html

成都网站建设公司_创新互联,为您提供企业网站制作品牌网站制作动态网站做网站建站公司企业建站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站网页设计