C++ 容器可代替链表吗?
还不晓得链表是什么,国外的书都没写的?有种感觉容器等于链表,迭送器等于指针,像vector这类的容器可代替链表吗?就是取代链表的作用,不用链表,用容器代替链表那容器等不等...
还不晓得链表是什么,国外的书都没写的?有种感觉容器等于链表,迭送器等于指针,
像vector这类的容器可代替链表吗?
就是取代链表的作用,不用链表,用容器代替链表 那容器等不等于链表的?
我想问的重点是 是不是学了容器就可以不用学链表的? 我只学了指针和数组,貌似他们连起来就是链表这种东西了吧? 展开
像vector这类的容器可代替链表吗?
就是取代链表的作用,不用链表,用容器代替链表 那容器等不等于链表的?
我想问的重点是 是不是学了容器就可以不用学链表的? 我只学了指针和数组,貌似他们连起来就是链表这种东西了吧? 展开
6个回答
展开全部
我下面的回答只针对C/C++语言。
“有种感觉容器等于链表,迭送器等于指针,”
-------这是错误的理解,链表在数据结构中指的是线性表的一种,它的每一个结点占据的内存位置在物理上可以相邻,也可以不相邻,显然他们在逻辑上是相邻的。它最少拥有两个域:数据域,指针域。常见的有单链表,双端链表,循环链表。容器是用来装别的对象的东西,例如数组也可以看作是一个容器。
迭代器不等于指针,在C语言中没有迭代器这个概念,迭代器是C++中引进的,是对C中指针的扩充。我们一般叫迭代器为智能指针,迭代器本质上是一个C++的类或者结构体,它只是重载了operator *、operato->。所以可以像指针一样的使用。
链表是一种线性的数据结构,有一种最简单的数据结构顺序线性表,数组就是一种常见的顺序线性表,他们在内存中的物理地址是连续的。在C/C++中可以用指针把一系列物理上不连续的地址链接起来构成逻辑上的连续,这就是链表。
在C++的STL中提供了一个叫做list<>的容器,它是一个双端链表,支持高效率的删除和插入操作。
“我想问的重点是 是不是学了容器就可以不用学链表的?”
---这个嘛,上面提到的list<>就是一种容器,而在STL中还有许多的其他容器。
我们在学习数据结构的时候老师不准我们使用STL的东西,我们要用一个链表,就得自己去写List类。但是在真正的项目中有谁会重写呢?直接STL就行了,当然如果对性能有特殊的要求的除外。链表是一种基本的数据结构,我想这是每一个用C++写程序的人应该知道的,弄清它的原理是没有坏处的。
至于你说的vector<>他一个单向容器,也就是说在STL中规定它只能在尾部插入和删除数据,但是可以高效的查找,耗时线性时间,直接给下标就行了。
而list<>支持高效的删除和插入操作,但是查找效率极低,因为他每次得从头开始查找。
希望回答没有跑题,呵呵!
“有种感觉容器等于链表,迭送器等于指针,”
-------这是错误的理解,链表在数据结构中指的是线性表的一种,它的每一个结点占据的内存位置在物理上可以相邻,也可以不相邻,显然他们在逻辑上是相邻的。它最少拥有两个域:数据域,指针域。常见的有单链表,双端链表,循环链表。容器是用来装别的对象的东西,例如数组也可以看作是一个容器。
迭代器不等于指针,在C语言中没有迭代器这个概念,迭代器是C++中引进的,是对C中指针的扩充。我们一般叫迭代器为智能指针,迭代器本质上是一个C++的类或者结构体,它只是重载了operator *、operato->。所以可以像指针一样的使用。
链表是一种线性的数据结构,有一种最简单的数据结构顺序线性表,数组就是一种常见的顺序线性表,他们在内存中的物理地址是连续的。在C/C++中可以用指针把一系列物理上不连续的地址链接起来构成逻辑上的连续,这就是链表。
在C++的STL中提供了一个叫做list<>的容器,它是一个双端链表,支持高效率的删除和插入操作。
“我想问的重点是 是不是学了容器就可以不用学链表的?”
---这个嘛,上面提到的list<>就是一种容器,而在STL中还有许多的其他容器。
我们在学习数据结构的时候老师不准我们使用STL的东西,我们要用一个链表,就得自己去写List类。但是在真正的项目中有谁会重写呢?直接STL就行了,当然如果对性能有特殊的要求的除外。链表是一种基本的数据结构,我想这是每一个用C++写程序的人应该知道的,弄清它的原理是没有坏处的。
至于你说的vector<>他一个单向容器,也就是说在STL中规定它只能在尾部插入和删除数据,但是可以高效的查找,耗时线性时间,直接给下标就行了。
而list<>支持高效的删除和插入操作,但是查找效率极低,因为他每次得从头开始查找。
希望回答没有跑题,呵呵!
展开全部
C++容器是高度优化过的链表程序,你可以试试自己重写一个链表,运行时间一般是STL容器的20倍以上,比Java慢是没得说了,估计连Python都比不上。
但是某些特殊的结构仍然需要使用链表,一般是一些不标准的结构,不适合用一种通用的程序包解决的问题,还是需要重新设计链表的。所以严格来说,C++容器不可以代替链表。细致点就是C++容器只能代替标准常见结构的链表,不能代替自定义结构的链表。
但是某些特殊的结构仍然需要使用链表,一般是一些不标准的结构,不适合用一种通用的程序包解决的问题,还是需要重新设计链表的。所以严格来说,C++容器不可以代替链表。细致点就是C++容器只能代替标准常见结构的链表,不能代替自定义结构的链表。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
链表相比vector更加底层了。
可以这么说,跟vector平级的相关容器可能是用链表来实现的,所以说vector用起来自然比链表容易些,而且功能强大些。
所以说谈不上代替
链表就是通过指针串联起来的一些内存单元。
链表是数据结构里面的东西,我想你应该知道这是一个合格的程序员是必学的。不过平时在写一些应用的时候,很少会用到链表,就是因为STL提供很强大的容易。
可以这么说,跟vector平级的相关容器可能是用链表来实现的,所以说vector用起来自然比链表容易些,而且功能强大些。
所以说谈不上代替
链表就是通过指针串联起来的一些内存单元。
链表是数据结构里面的东西,我想你应该知道这是一个合格的程序员是必学的。不过平时在写一些应用的时候,很少会用到链表,就是因为STL提供很强大的容易。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
链表和容器是两个概念
链表是一种数据存储结构 不同的结点以指针链接起来 结点包括数据域和指针域 数据域就是放数据的地方 可以是任意的类型 指针域不用说就是指针 指向下一个结点(单链表)
千万别搞混了
容器存储连续 链表可以不连续
链表是一种数据存储结构 不同的结点以指针链接起来 结点包括数据域和指针域 数据域就是放数据的地方 可以是任意的类型 指针域不用说就是指针 指向下一个结点(单链表)
千万别搞混了
容器存储连续 链表可以不连续
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
容器有很多种, vector是类似数组的。 list基本上是一种链表
迭代器是模拟指针的但不能说就等于指针了
你最好先搞清楚容器都怎么用,再搞清楚链表是怎么回事再说
迭代器是模拟指针的但不能说就等于指针了
你最好先搞清楚容器都怎么用,再搞清楚链表是怎么回事再说
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询