精华内容
下载资源
问答
  • C++软件开发面试中,遇到过一个问题:C++ STL中的vector和array区别有哪些?当时本人并未回答出这个问题,因为之前从未用过array区别主要有: vector是可变长数组,array是定长数组,array在声明时长度就定...

    C++软件开发面试中,遇到过一个问题:C++ STL中的vector和array的区别有哪些?当时本人并未回答出这个问题,因为之前从未用过array。

    区别主要有:

    1. vector是可变长数组,array是定长数组,array在声明时长度就定下来了。
    2. vector和array都是对基本的数组进行了封装,vector的数组是new出来的,在堆内存;array数组是在栈内存。
    3. vector封装了插入和删除成员函数,array并未提供删除和插入成员函数。
    展开全文
  • 预示刚刚过去的七夕,汪汪哭了,但是莫,码神终究是码神,秋名山的路很长,昨天晚上想了一下,stl中的vector,紧接着就连起了一系列,乘着晚上有时间来大家讲一下,c++中的数组,vector和array区别 话不多说,...

    hello,最近码神新学了一个单词:Cipher(暗号)周董暗号,预示刚刚过去的七夕,汪汪哭了,但是莫,码神终究是码神,秋名山的路很长,昨天晚上想了一下,stl中的vector,紧接着就连起了一系列,乘着晚上有时间来和大家讲一下,c++中的数组,vector和array的区别
    话不多说,开车了:

    1. 数组(太简单了,不说了)
    2. vector
      首先vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件:#include; 当然也可以简单理解为vector是一种动态数组
    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {
    	vector<int> vi;
    	int n;
    	cin>>n;
    	vector<double> vd(n);
    	return 0;
    }
    

    其中vi是一个vector int 对象,vd是一个vector的对象。
    因为vector对象在你插入或添加值时自动改变长度,因此可以将vi的初始长度定义为0,妈妈再也不用担心我数组越界了

    1. array
      前面我们讲到vector类的功能比较强大,但是付出的代价就是效率低下,如果知道数据的具体大小又害怕越界等,c++11中提出了array,先上代码
    #include<iostream>
    #include<array>
    using namespace std;
    int main()
    {
    	array<int,5> ai;
    	return 0;
    }
    

    总结:
    1.十分有把握的简单数据我还是推荐用数组
    2.c++11才支持array
    3.不追求效率的情况下可以用vector,方便
    4.array和数组储存在栈中,而vector存在堆中
    5.由于array是对象之间的,故可以将一个array的对象赋值给另一个array对象

    如果感觉码神写的还不错,欢迎加关注,再肝array 和 vector 的函数用法,跪求点赞+关注

    展开全文
  • 文章目录一、vector容器1.vector介绍2.定义初始化3.vector...遍历list四、vectorarray、list的区别1.vectorarray区别相同点:不同点:2.vector与list的区别 一、vector容器 1.vector介绍      

    一、vector容器

    1.vector介绍

              vector向量容器是以类模板的形式提供的动态数组,与数组相似,vector的元素也存储在连续的空间中,支持使用下标访问元素,与数组不同的是,vector容器的大小可以动态改变,存储空间及分配由容器自己完成。

    2.定义初始化

    需引入头文件< vector >

    vector<int>  v1; //定义一个int类型的空vevtor
    vector<char> v2; //定义一个char类型的空vector
    vector<ClassName>; //定义一个xxx类的空vector 
    vector<int> v3(10) // 定义一个包含10个int元素的vector
    vector<int> v4(10,1) //定义一个包含10个int元素的vector 初始值为1
    
    string str[] = {"KB","LB""JB"};
    vector<string> v1(str,str+2); //定义一个包含两个string元素的vector
    vector<string> v2(v1);  //Vector可以用对象直接赋值
    

    3.vector常用的函数

    	vector<int> v1;  //定义一个类型为int 的空vector
    	v1.begin();     // 返回vector头元素的指针
    	v1.end();      // 返回vector尾元素的指针
    	v1.rbegin();    // 指向向量中最后一个元素
    	v1.rend();      //指向向量中第一个元素
    	v1.push_back(1);   //往末尾添加 
    	vector<int>::iterator it = v1.begin();//迭代器并指向第一个元素
    	for (; it < v1.end(); it++)  //遍历容器元素
    		cout << *it << endl;
    	v1.pop_back();  //删除最后一个元素
    	v1.clear();     //清空向量
    	v1.at(0);        //类似数组下标访问
    	v1.size();       //获取向量里有几个元素
    	v1.empty();      //判断向量是否为空
    	v1.assign(1, 3); //修改向量中第1个元素为3
    

    4.遍历向量

    通过迭代器来遍历整个向量

    vector<int>::iterator it = v1.begin();//迭代器并指向第一个元素
    for (; it < v1.end(); it++)  //遍历容器元素
    		cout << *it << endl;
    

    二、std::array容器

    1.std::array介绍

              std::array是在C++11中才引入的,与内置数组相比,array是一种更安全、更容易使用的数组类型。与内置数组类似,array对象的大小是固定的。因此,array不支持添加和删除元素以及改变容器大小的操作。除了有传统数组支持随机访问、效率高、存储大小固定等特点外,还支持迭代器访问、获取容量、获得原始指针等高级功能。

    2.定义初始化

    需引入头文件 < array>

    array<int , 5> a1; //定义一个长度为5的array 但是没有初始化值为随机值
    array<int, 5> a2 = { 1,2,3,4,5 };  //定义一个长度为5的array 并初始化
    array<int, 5> a3(a2);   //array也是可以向向量一样传对象的
    

    3.array常用函数

    array<int, 5> a2 = { 1,2,3,4,5 };  //定义一个长度为5的array 并初始化
    a2.begin();           //array中的第一个元素
    a2.end();            //array中的最后一个元素
    a2.data();           //返回首地址
    a2.empty();          //判断array是否有元素
    a2.at(0);            //类似数组访问
    

    4.遍历array

    for (int i = 0; i < a2.size(); i++)
    		cout << a2.at(i);
    

    三、list容器

    1.list介绍

             list链表容器是对双向链表的一个泛化实现,是通过指针将存储在不同位置的元素连接起来所构成的一个线性序列,双向链表的每个节点都有分别指向前驱和后驱节点的指针,所以在list中可以非常方便地向前向后去遍历容器

    2.定义及初始化

    需引入头文件< list>

     list<int> list1;           //创建一个int类型的list对象
    
     list<int> list2(5);       //创建一个含有5个int元素的list
    
     list<int>list3(3,2);  		//创建含有3个元素的list,且元素为2
    
     list<int>list4(lst2);    //使用也可以通过传对象进行赋值
    
    

    3.list常用函数

    		list1.back() 	//返回最后一个元素 
    		list1.begin() 	//返回指向第一个元素的迭代器 
    		list1.clear() 	//删除所有元素 
    		list1.empty() 	//如果list是空的则返回true 
    		list1.end()		 //返回末尾的迭代器 
    		list1.erase() 	//删除一个元素 
    		list1.front() 	//返回第一个元素 
    		list1.pop_back() //删除最后一个元素 
    		list1.pop_front() //删除第一个元素 
    		list1.push_back() //在list的末尾添加一个元素 
    		list1.push_front() //在list的头部添加一个元素 
    		list1.rbegin() //返回指向第一个元素的逆向迭代器 
    		list1.remove() //从list删除元素 
    		list1.remove_if() //按指定条件删除元素 
    		list1.size() //返回list中的元素个数 
    		list1.sort() //给list排序 
    		list1.unique() //删除list中重复的元素
    

    4.遍历list

    list<int>::iterator it = list1.begin();
    for (it = list1.begin(); it != list1.end(); it++)
    	cout << *it << endl;
    

    四、vector、array、list的区别

    1.vector与array的区别

    相同点:

    (1)、vector与array 内存都是连续的
    (2)、vector与array 与数组相似都可以使用下标访问
    (3)、vector与array 的安全性比较高,避免越界

    不同点:

    (1)、vector的存储空间是动态的,但是array的存储空间是固定的
    (2)、vector的数据存在堆区,而array的数据存在栈区
    (3)、vector可以动态插入,但是array不行

    2.vector与list的区别

    (1)、vector的内存空间是连续的,list的内存空间不连续
    (2)、vector可以随机存取,list随机存取效率低
    (3)、vector内存不够是会主动开辟新空间,而list不需要,所以list的开销会比较小
    (4)、当向vector插入或者删除一个元素时,需要复制移动待插入元素右边的所有元素;因此在有频繁插入删除操作时,使用list更加合适。

    展开全文
  • c++提供了三个数组的替代品,分别是模板类vectorarray和valarray,它们是由不同的小组开发,用于不同的目的。 其中,模板类vector类似于string类,也是一个动态数组。可以在程序运行时设置vector对象的长度,.

    模板类是已经实现好的类模板,它们实际上是c++自带的类,只需要像使用自定义的类一样,创建对象然后调用方法即可。与自定义的类不同的是,模板类的数据成员和成员函数是由开发小组已经写好的,而自定义的类需要用户根据使用要求自己给出数据成员和成员函数。

     

    模板类vector

    c++提供了三个数组的替代品,分别是模板类vector、array和valarray,它们是由不同的小组开发,用于不同的目的。

    其中,模板类vector类似于string类,也是一个动态数组。可以在程序运行时设置vector对象的长度,可以在容器末尾附加新数据,还可以向中间插入新数据,以及删除某个(某些)数据。基本上,vector可以代替使用new创建的动态数组。

    与数组相比,模板类vector的优势在于:

    ① vector对象的长度可以动态拓展;而数组的长度在声明时就已经确定,也就是存储数据的数量已经确定。

    ② vector 可以存储的数据种类多于数组。数组只能存储基本数据类型的数据,比如int、char类型的数据;而模板类vector不仅能存储基本数据类型的数据,还可以存储结构体类型的变量、对象、枚举类型的变量等等,甚至vector里面嵌套使用vector,比如我们要存储一个初中三个年级所有班级的期中考试成绩:

    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {
        vector<float> class_1_1 = {11.1,11.2,11.3};
        vector<float> class_1_2 = {12.1,12.2,12.3};
        vector<float> class_1_3 = {13.1,13.2,13.3};
        vector<vector<float>> grade_1 = { class_1_1, class_1_2, class_1_3 };
    
        vector<float> class_2_1, class_2_2, class_2_3, class_2_4;
        vector<vector<float>> grade_2 = { class_2_1,class_2_2,class_2_3,class_2_4 };
    
        vector<float> class_3_1, class_3_2, class_3_3, class_3_4, class_3_5;
        vector<vector<float>> grade_3 = { class_3_1,class_3_2,class_3_3,class_3_4 ,class_3_5};
    
        vector<vector<vector<float>>>school = { grade_1, grade_1, grade_3 };
    
        cout << grade_1[1][2] << endl;
    
    }

    其中class_1_1、class_1_2、class_1_3分别存储初一1班、2班、3班所有人的成绩(这里假设每个班只有三人);

    grade_1、grade_2、grade_3分别存储初一、初二、初三年级所有班的成绩(这里假设分别有3、4、5个班);

    school存储学校三个年级所有班级的成绩。

    grade_1[1][2]表示初一2班第三个同学的成绩,相当于使用school[0][1][2],结果是12.3,如下图:

    由上例可以看出,vector存储数据的灵活性、功能性极其强大,即使是往更远处想,要存储一个县、一个省甚至全国所有初中的期中考试成绩,只需要再进行vector的嵌套即可,而这是数组所无法完成的。

     

    ③ vector对于数据操作的支持远远强于数组。模板类vector提供了非常丰富的类方法用于操作vector对象中的数据,这些方法后面单独说。

    根据上面我们可以看出:

    vector对象中的数据和数组中的一样 ,都可以通过下标进行访问,这一点对于下面的模板类array和valarray也是一样的。

    另外,虽然vector类的功能比数组要强大的多,但是更为强大的功能所付出的代价是vector的效率比较低。如果所要存储的数据已经确定了,那么使用数组是更优的选择,代价是不那么方便和安全(数组存在访问越界的问题,vector使用成员函数at()的话会更加安全)。

     

    模板类array

    鉴于vector类和数组各有优缺点,为了兼顾效率和安全性等,c++11推出了模板类array。

    与数组一样,array对象的长度也是固定的,也使用栈(静态内存分配),而不是自由存储区,效率上array与数组相同,但是array也有很多和vector类一样的方法(当然也有一些方法是没有的,比如push_back()和insert()),因此array对象兼具效率高和安全性(方法at())以及对数据的操作性(丰富的成员函数)等优点。

    array对象的创建与vector有所区别,一般格式如下:

    array<typeName, n_elem> arr;

    其中typeName表示arr存储的数据的类型,n_elem表示包含的数据数量,前面已经说过array对象的长度是固定的,因此n_elem不能是变量。

    比如,创建一个包含四个int型数据的array对象:

    array<int, 4>array1 = {1, 2, 3, 4};

    另外,无论是模板类vector和array,都提供了拷贝构造函数,即可以将一个vector(或array)对象赋给另一个vector(或array)对象;但是对于数组而言,如果要复制一个数组的数据 ,必须将每个元素逐一复制。

     

    模板类valarray

    模板类valarray是面向数值计算的,它不是STL的一部分,相比较而言,模板类vector更多的是面向数据存储和数据操作(比如插入、排序、搜索),它所提供的算数方面的支持没有valarray多。

    valarray对象的创建和vector是一样的,只需要将关键字vector换成valarray即可。

    对于模板类valarray来说,它更偏重于数值计算,也就是方法的使用,这个以后单独说。

    展开全文
  • array> using namespace::std; int main() { double a1[4] = { 1.2,2.4,3.6,4.8 }; vector<double> a2(4); a2[0] = 1.0 / 3.0; a2[1] = 1.0 / 5.0; a2[2] = 1.0 / 7.0; a2[3] = 1.0 / 9.0;.
  • vector是使用 new delete 来管理内存的(堆中分配内存) 3、array 数组模板 ,在C++11中才支持 通用格式:array<类型名, 元素个数> 数组名; 注意,因为长度固定,这里的元素个数不能是变量。 长度...
  • ArrayList和Vector区别

    2021-03-13 07:09:06
    相同点:1、ArrayList和Vector都是继承了相同的父类实现了相同的接口2、底层都是数组实现的3、初始默认长度都为10。不同点:1、同步性:Vector中的public方法多数添加了synchronized关键字,以确保方法同步,也即...
  • 模板类 vector array 是数组的替代品。 模板类vector类似于String类,也是一种动态数组。可以在运行阶段设置vector对象的长度,可以在追加数据或者插入数据。它是使用new创建动态数组的替代品。实际上,vector类...
  • array和vector,数组三者区别和联系 共同点 不同点 本文基于邓俊辉编著《数据结构(C++语言版)(第3版)》、《C++ Primer(第5版)》以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出。 一、数组 C++中...
  • 文章目录一、数组一维数组一维数组初始化一维数组元素的引用二、STL的arrayC++ STL array随机访问迭代器(精讲版)begin()/end() cbegin()/cend()rbegin()/rend() crbegin()/crend()C++ STL array容器访问元素...
  • 这里与GNU的STL稍有不同,GNU中_vector_base包含一个名为_vector_impl的成员,这个成员实现了_M_allocate()_M_deallocate(),而SGI中可以看到是直接在_Vector_base中实现的。 vector默认的allocator会为
  • vectorarray与数组

    2021-05-23 21:48:11
    vectorarray与数组 vector(=>动态数组的替代品)与string类似 vector的new与delete自动完成 eg: #include using namespace std; int main() { vectorvi; /创建了一个int类型,储存有0个元素的数组,但它...
  • 模板类Vector&array

    2021-06-04 13:03:52
    使用模板类Vector需要包含vector的头文件,vector在插入或添加值的时候会自动调整长度,可以将声明的vector对象的初始长度设置为0,如: #icnlude <vector> ... using namespace std; vector<int> vi; int...
  • –本文章来自于侯捷老师的STL课程自己的理解 若有错误,欢迎指正 Vector可以说是C++里面最常使用的容器了,比较重要的部分见上图。 首先,Vector的操作近似于一个数组,并且可以动态扩展,并且每次扩展申请的内存...
  • 1.代码demo ...vector> #include<array> using Point = std::pair<int, int>; using Points = std::vector<Point>; using Points_1 = std::array<Point,10>; int main()
  • c++顺序容器-arrayvector

    千次阅读 2021-07-19 13:11:24
    array与vectorarray类型vector类型 array类型 c++11提供了一种新的数组类型array,其是由模板实现的,需要包含头,相较于C语言的原生数组: int arr[]={1,2,3,4,5} std::array<int,5> ARR{1,2,3,4,5} 前者...
  • 数组、array和vector、valarray的区别(P22) array和数组都是长度固定的,开始的时候需要指定大小。vector可以通过push_back等操作改变大小。 已知1,因此array和数组都存放栈中,vector存放在堆中 vector和array...
  • ArrayList Vector区别是什么? 线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的。 性能:ArrayList 在性能方面要优于 Vector。 扩容:ArrayList Vector ...
  • 在写java的时候,基本上都喜欢用arraylist,甚至我都不知道有个vector的存在。查了一下发现又是线程安全问题。。。咋个线程安全天天围着我转呢。。。多得阿里巴巴,让我开始认识java的所谓线程安全问题。1. Vector &...
  • List和Array之间的区别

    2021-07-16 22:06:55
    What is the difference between List and Array ... or the difference between Array and Vector!解决方案In general (and in Java) an array is a data structure generally consisting of sequential memory st...
  • scalar_scalar与vector之间的区别

    千次阅读 2021-04-19 03:30:55
    scalar与vector之间的区别有些物理量,既要由数值大?包括有关的单位),又要由方向才能完全确定。这些量之间的运算并不遵循一般的代数法则,而遵循特殊的运算法则。这样的量叫做物理矢量。有些物理量,只具有数值大小...
  • 文章目录(C++ 成长记录) —— 实现类似std::vectorArray类概述标准库自行实现的Array类编写简单的测试程序个人格言 (C++ 成长记录) —— 实现类似std::vectorArray类 概述     Array是平常我们在程序开发...
  • I have the following class: class PyWav { public: static inline boost::python::object sdVecToNumpyArray(std::vector const& vec) { npy_intp size = vec.size(); double...
  • 1. array 定义的时候必须定义数组的元素个数;而vector 不需要; 且只能包含整型字面值常量,枚举常量或者用常量表达式初始化的整型const对象,非const变量以及需要到运行阶段才知道其值的const变量都不...和vector...
  • ArrayList和Vector区别相同点:1、ArrayList和Vector都是继承了相同的父类实现了相同的接口2、底层都是数组实现的3、初始默认长度都为10。不同点:1、同步性:Vector中的public方法多数添加了synchronized关键字...
  • C++学习笔记——STL标准库(二) 明天预告:顺序容器——list
  • 本文还是折腾 Java 中的队列,上次比较了 Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList,当时感觉挺明白,后来想想又有些不理解的地方,所以今天在重新翻出来研究一下,我承认我钻了牛角尖了。...
  • ArrayVector的初始化

    2021-11-22 22:42:36
    Array 与 Vcetor 的初始化 Array 初始化 指定初始化列表,有逗号分割要指定的值,这些值成为 array 的部分或全部元素: int elem_seq[ seq_size ] = { 1, 2, 3, 3, 4, 7 2, 5, 12, 3, 6, 10, 4, 9, 16, 5, ...
  • Vector(向量) Matrix(矩阵) Tensor(张量) Array(数组) 先上两张图感受下,Scalar-Vector-Matrix-Tensor的过程即从单个数值到一维到二维一直不断增加维度的数据结构。 Scalar(标量) Vector...
  • 前言Vector是java.util包中的一个类。 SynchronizedList是java.util.Collections中的一个静态内部类。在多线程的场景中可以直接使用Vector类,也可以...那么,到底SynchronizedList和Vector有没有区别,为什么java a...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 187,732
精华内容 75,092
关键字:

vector和array的区别