精华内容
下载资源
问答
  • vector和list的对比

    2021-04-12 21:15:05
    vector list

    vector和list的相同点
    都是STL中的序列式容器

    vector和list的不同点
    1.底层结构:
    vector是一段连续的空间,用动态顺序表实现,而list是一个带头结点的双向链表;

    2.是否支持随机访问:
    vector支持随机访问,list不支持随机访问
    vector访问某个元素的效率为O(1),
    list访问某个元素的效率为O(n)

    3.任意位置插入和删除元素的效率:
    vector中效率低,时间复杂度为O(n),list中效率高,时间复杂度为O(1)

    原因在于vector中插入元素时,从插入位置开始所有元素都要往后移动一位,还可能需要增容,申请新的空间,拷贝原来的空间的内容,再释放原有的空间,增容代价高,而删除一个元素,从删除位置的下一位开始所有元素都要向前移动一位;list中增加和删除节点只需要改变指针的指向,申请和释放单个元素的空间,代价相对较小。

    4.空间利用率
    vector底层为连续空间,不容易造成内存碎片,空间利用率高,缓存利用率高;
    list底层节点动态开辟,小节点容易造成内存碎片,空间利用率低,缓存利用率低;

    5.迭代器
    vector中的迭代器是原生态指针,也就是元素类型的指针;
    list中的迭代器是对原生态指针(节点指针)的封装;

    6.迭代器失效
    vector中插入和删除都可能导致迭代器失效,而list中插入元素不会导致迭代器失效,删除元素会导致迭代器失效;
    vector中插入元素有可能需要增容,迭代器指向的之前的空间会被释放,之前的迭代器会失效;删除元素也会导致迭代器失效;
    list中插入元素只是添加了一个新的节点,不会导致之前存在的迭代器失效,而删除元素只会导致当前迭代器失效,其他迭代器不会受到影响;

    7.使用场景
    vector适用于需要高速存储的,支持随机访问的,不关心插入删除效率的场景;
    list适用于需要进行大量插入和删除操作的,不关心随机访问的场景

    展开全文
  • vector和list的区别

    2021-03-16 23:15:27
    1.内存空间 vector和数组相似,内存空间是连续的,并且地址不变;...list是非连续的存储结构可以进行快速的插入删除操作。 4.存储结构 vector是连续的存储结构,是可以实现动态增长的对象数组,支持对数组的高效

    1.内存空间
    vector和数组相似,内存空间是连续的,并且地址不变;list是双向链表实现的,内存空间是不连续的。
    2.存取
    vector能进行高效的随机存取操作,时间复杂度为O(1);list是通过指针访问数据,不能随机访问,时间复杂度为O(n)。
    3.插入或删除
    vector因地址时连续的,进行插入和删除操作时会进行内存块的拷贝复制,时间复杂度是O(n);list是非连续的存储结构可以进行快速的插入和删除操作。
    4.存储结构
    vector是连续的存储结构,是可以实现动态增长的对象数组,支持对数组的高效访问和在数组尾部快速的插入和删除,在中间和头部删除比较不易,需要移动大量的数据;list是非连续的存储结构,是双链表结构,支持链表的双向遍历。每个节点包含元素本身,前驱和后继,因此可以进行高效的访问和插入删除操作。
    5.对迭代器的支持不同
    相同点在于,vector< int >::iterator和list< int >::iterator都重载了 “++ ”操作。
    而不同点在于,在vector中,iterator支持 ”+“、”+=“,”<"等操作。而list中则不支持。

    展开全文
  • vectorlist的比较

    2021-09-19 22:33:24
    vector和list相同点: 都是STL中的序列式容器 vector和list的不同点: 1.底层结构: vector是一段连续的空间,用动态顺序表实现,而list是一个带头结点的双向链表; 2.是否支持随机访问: vector支持随机访问,...

    本博客只作为自己笔记使用

    vector和list的相同点:
    都是STL中的序列式容器

    vector和list的不同点:
    1.底层结构:
    vector是一段连续的空间,用动态顺序表实现,而list是一个带头结点的双向链表;

    2.是否支持随机访问:
    vector支持随机访问,list不支持随机访问
    vector访问某个元素的效率为O(1),
    list访问某个元素的效率为O(n)

    3.任意位置插入和删除元素的效率:
    vector中效率低,时间复杂度为O(n),list中效率高,时间复杂度为O(1)

    原因在于vector中插入元素时,从插入位置开始所有元素都要往后移动一位,还可能需要增容,申请新的空间,拷贝原来的空间的内容,再释放原有的空间,增容代价高,而删除一个元素,从删除位置的下一位开始所有元素都要向前移动一位;list中增加和删除节点只需要改变指针的指向,申请和释放单个元素的空间,代价相对较小。

    4.空间利用率
    vector底层为连续空间,不容易造成内存碎片,空间利用率高,缓存利用率高;
    list底层节点动态开辟,小节点容易造成内存碎片,空间利用率低,缓存利用率低;

    5.迭代器
    vector中的迭代器是原生态指针,也就是元素类型的指针;
    list中的迭代器是对原生态指针(节点指针)的封装;

    6.迭代器失效
    vector中插入和删除都可能导致迭代器失效,而list中插入元素不会导致迭代器失效,删除元素会导致迭代器失效;
    vector中插入元素有可能需要增容,迭代器指向的之前的空间会被释放,之前的迭代器会失效;删除元素也会导致迭代器失效;
    list中插入元素只是添加了一个新的节点,不会导致之前存在的迭代器失效,而删除元素只会导致当前迭代器失效,其他迭代器不会受到影响;

    7.使用场景
    vector适用于需要高速存储的,支持随机访问的,不关心插入删除效率的场景;
    list适用于需要进行大量插入和删除操作的,不关心随机访问的场景
    ————————————————
    版权声明:本文为CSDN博主「cxpxatu521」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/m0_51765966/article/details/115641758

    展开全文
  • 文章目录一、vector容器1.vector介绍2.定义初始化3.vector...遍历list四、vector、array、list的区别1.vector与array的区别相同点:不同点:2.vectorlist的区别 一、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更加合适。

    展开全文
  • 文章目录特性列举底层存储结构不同线程安全性不同默认的大小不同扩容机制迭代器增删改查的效率总结一下 要想回答这个问题,可以先把各种都讲特性,然后再从底层存储结构,线程...Vector和前面说的ArrayList很是类似,这
  • Java中的List是一个常用的数据类型,其一共有三个实现类:ArrayList、Vector和LinkedList一、ArrayList1、ArrayList是最长用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个...
  • ArrayList和Vector的区别

    2021-03-13 07:09:06
    相同点:1、ArrayList和Vector都是继承了相同的父类实现了相同的接口2、底层都是数组实现的3、初始默认长度都为10。不同点:1、同步性:Vector中的public方法多数添加了synchronized关键字,以确保方法同步,也即...
  • vector list异同 Vector:  连续存储的容器,动态数组,在堆上分配空间。  底层实现:数组。  两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定...
  • ArrayList和Vector的区别相同点:1、ArrayList和Vector都是继承了相同的父类实现了相同的接口2、底层都是数组实现的3、初始默认长度都为10。不同点:1、同步性:Vector中的public方法多数添加了synchronized关键字...
  • 集合类分为两个分支,Collection与Map,其中Collection接口继承了Iterator接口,继承Iterator接口的类可以使用迭代器遍历元素(即Collection接口的类都可以使用),今天我们从相同点、不同点、以及JDK源码等各个方面来...
  • 文章目录概念:什么是STL概念:容器 stringstring常用接口介绍概念:容器 vectorvector常用接口介绍容器list总结 概念:什么是STL 简单来来认识一下吧STL吧,他是c++标准模版库包含了容器(vector,list,string……的...
  • 要想回答这个问题,可以先把各种都...线程不安全有顺序,会按照添加进去的顺序排好基于数组实现,随机访问速度快,插入删除较慢一点可以插入null元素,且可以重复Vector和前面说的ArrayList很是类似,这里说的也是...
  • 在线程中有两种常用的方法,能够通过数组实现相应的功能,但除此之外在区别上也是很明显的...1.相同点(1)都是有序集合。(2)数据不允许重复。(3)都实现了list接口。(4)都是通过数组实现的。(5)数组进行复制、移动、代...
  • STL的vector介绍 vector:向量容器 底层数据结构:是动态开辟的数组,每次以原来空间大小的2倍进行扩容的 添加操作 vector<int> vec; 定义一个int类型的vector vec.push_back(20); 在末尾添加元素 时间复杂度...
  • 同:三个类都实现了List接口,存储数据的特点相同,存储有序的、可重复的数据 不同: ArrayList:作为List的主要实现类,线程不安全,效率高,底层使用Object[]elementData存储 LinkList:对于频繁的插入,删除...
  • iterator类型别名容器定义初始化拷贝初始化顺序容器独有的构造函数(array除外)array的初始化与内置数组类型的区别6种初始化方法(以vector为例)赋值swap使用assign(仅顺序容器)使用swapswap仅交换容器内部...
  • 相同点:从源码上看ArrayList、LinkedList和Vector都实现了List接口,存储数据的特点相同:存储的数据有序、可重复 不同点: ArrayList:是List的接口的主要实现类,在jdk1.2才更新出来,线程不安全,效率高,查询...
  • 文章目录相同点不同点1、结构2、安全3、效率使用环境 相同点   ArrayList、Vector以及LinkedList都是实现了List接口的集合; 不同点 1、结构   在结构上来讲,ArrayList和Vector都是数组,而...
  • 以前,我总是以为Vector在长度未知的情况下可以很好地用于非描述对象。 据我所知,我也认为它也是线程安全的不再使用Vector会发生什么变化,...就其线程安全List实现而言,@skaffman CopyOnWriteArrayList或多或少...
  • string和vector常见面试题 手撕string类 主要就是实现构造函数,析构函数,拷贝构造函数,以及赋值运算符重载的函数,这四个函数 #include<iostream> #include<string> using namespace std; ...
  • 原文:转载自:...于是就很想去看看原文,废了半天的功夫终于找到了,原文还是一样有出错我不理解的地方,我也把原文的地址贴在上面了。三月份学习的Java集合框架这部分,这几天拿出来整理就想再...
  • vector常用方法assign() 对Vector中的元素赋值void assign( input_iterator start, input_iterator end ); //void assign( size_type num, const TYPE &val );reserve() 设置Vector最小的元素容纳数量 函数为...
  • List接口框架知识

    2021-09-23 23:01:47
    List接口框架 package com.atguigu.java; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; /** * 1. List接口框架 * ...
  • 通过使用成员函数 emplace(),可以在 vector 序列中插入新的元素。对象会在容器中直接生成,而不是先单独生成对象,然后再把它作为参数传入。emplace() 的第一个参数是一个迭代器,它确定了对象生成的位置。对象会被...
  • 为什么要用接口引用指向实现类的对象?这种写法其实java多态的表现形式多态的...是在栈区开辟一个空间放list引用,并没有创建对象所以不知道ArrayList还是LinkedList当你list= new ArrayList(); 就创建了ArrayList对...
  • Java List知识总结

    2021-01-21 20:17:29
    2.List接口实现类有ArrayList、LinkedList、Vector (1)ArrayList ArrayList是List接口的主要实现类; ArrayList的底层数据结构是动态数组,查询效率高,增删慢 ArrayList是线程不安全的,而Vector是...
  • STL vector

    2021-02-06 20:45:49
    vector是个顺序容器,可以认为是个变长数组。与数组一样,vector是使用连续的存储空间来保存元素,这意味着可以使用指向其元素的常规指针的偏移量来访问它们的元素,而且效率与数组一样高。vector的随机存取效率很高...
  • 1. Java集合类基本概念Java容器类类库的用途是”保存对象”,并将其划分为两个不同的概念:1) Collection一组”对立”的元素,通常这些元素都服从某种规则1.1) List必须保持元素特定的顺序1.2) Set不能有重复元素1.3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,201
精华内容 24,480
关键字:

vector和list的相同点