
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的工作原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)