c 中vector的用法详解

c 中vector的用法详解,第1张

c中vector的用法详解如下:

vector(向量):C中的一种数据结构,确切的说是一个类。它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。

没记错的话,好像是vector适用于多线程,比较安全,但速度比较慢

数组占用的资源更小,就像你用string和char 数组的道理是一样的用更底层的速度更快,方便性没写好的string好用而以而且要搞清楚一个关系,没有数组,哪来的向量

我再补充一点数组是栈上分配空间,vector是堆上分配空间

数组是C++语法里规定的基本数据类型。而vector本身并不是C++的一部分,是属于C++标准库提供的功能,是一群C++大牛们写出来的给C++菜鸟们使用的东东。如果你是大牛,那么你也可以写出一个东东来取代vector

动态内存管理,不易出错!

其实vector和数组一样,只能存储单一的数据类型,它的另一个主要的好处是可以动态的增长长度,

定义一个vector类型的变量时,并不需要指定它的容量是多少,如果有需要,只管往里面push数据。

vector会为你自动管理这些数据。

我们在程序中可能经常要用到数组,但有时候我们可能并不知道自己的程序中具体用到数组的大小(比如说,我们读一个文件记录,根据记录多少调整数组的大小,事先并不知道到底有多少记录),这种情况下,传统上是用动态数组实现的,这样不怎么安全但有了vector我们就不必关心数组的大小,而直接声明为vector<type_name>array_name,其中,type_name为你要定义的数组类型,array_name为数组变量名,当你需要往数组中放数据时,只需要用如下格式array_namepush(要放入的数据),vector会自动调整数组大小,要减小数组大小,可以用如下格式array_namepop();

至于效率,没怎么注意过,但是感觉数组效率应该比vector高,vector只是使用

起来比较方便。

数组的效率比Vector要高,Vector用起来要比数组方便。

楼上说的已经很好了!我在补充一点

数组在内存中分配的连续空间,多次分配释放后会有内存碎片,

而vectors是动态增长的,不是连续的,所以不会出现内存碎片

还有vector的迭代器能防止出现类似数组愈界等等

动态申请内存。

warmwormn的回答没有对症下药。

fantacywall的回答有点问题,他说“vector 实际上是链表实现”,实际上vector是用数组实现的,支持随机存取。

下面我给出我的解释:

如上所说,vector是用数组实现的,每次执行push_back *** 作,相当于底层的数组实现要重新分配大小(即先free掉原存储,后重新malloc);这种实现体现到vector实现就是每当push_back一个元素,都要重新分配一个大一个元素的存储,然后将原来的元素拷贝到新的存储,之后在拷贝push_back的元素,最后要析构原有的vector并释放原有的内存。

例如:

当主函数只有一个push_back时:

int main()

{

vector<HP> sb;

HP a;

sbpush_back(a);

while(1);

}

由于原来的vector为空,所以只是分配新的空间,然后拷贝push_back的元素。所以结果如下:

gouzao //这是 语句 HP a; 构造a产生

kaobei //这是 语句 sbpush_back(a) 拷贝新元素产生的。

当主函数有两个push_back时:

int main()

{

vector<HP> sb;

HP a;

sbpush_back(a);

sbpush_back(a);

while(1);

}

注意执行第二个push_back时,首先另外分配两个元素的空间,并将原来的vector元素拷过来,后拷贝新push的元素,最后析构原来的元素。故结果如下 :

gouzao //这是 语句 HP a; 构造a产生

kaobei //这是 第一个sbpush_back(a) 拷贝新元素产生的。

kaobei //下面这两个是由第二个sbpush_back(a)产生的,它先先将原来的vector元素拷过来,后拷贝新push的元素

kaobei

xigou //只是析构原来的vector元素产生的。

当主函数有三个push_back时:一样分析,

int main()

{

vector<HP> sb;

HP a;//构造

sbpush_back(a); //一个拷贝

sbpush_back(a);//两个拷贝,一个析构

sbpush_back(a);//三个拷贝,两个析构

while(1);

}

结果如下:

gouzao

kaobei

kaobei

kaobei

xigou

kaobei

kaobei

kaobei

xigou

xigou

恕我说的不够周密,希望你能结合我说的仔细思考!

以上就是关于c 中vector的用法详解全部的内容,包括:c 中vector的用法详解、c++有了向量(vector)为什么还要用数组、关于构造vector的工作原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9848244.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存