C++ 容器可代替链表吗?

来源:百度知道 编辑:UC知道 时间:2024/06/06 16:16:09
还不晓得链表是什么,国外的书都没写的?有种感觉容器等于链表,迭送器等于指针,

像vector这类的容器可代替链表吗?
就是取代链表的作用,不用链表,用容器代替链表 那容器等不等于链表的?

我想问的重点是 是不是学了容器就可以不用学链表的? 我只学了指针和数组,貌似他们连起来就是链表这种东西了吧?

我下面的回答只针对C/C++语言。

“有种感觉容器等于链表,迭送器等于指针,”
-------这是错误的理解,链表在数据结构中指的是线性表的一种,它的每一个结点占据的内存位置在物理上可以相邻,也可以不相邻,显然他们在逻辑上是相邻的。它最少拥有两个域:数据域,指针域。常见的有单链表,双端链表,循环链表。容器是用来装别的对象的东西,例如数组也可以看作是一个容器。
迭代器不等于指针,在C语言中没有迭代器这个概念,迭代器是C++中引进的,是对C中指针的扩充。我们一般叫迭代器为智能指针,迭代器本质上是一个C++的类或者结构体,它只是重载了operator *、operato->。所以可以像指针一样的使用。

链表是一种线性的数据结构,有一种最简单的数据结构顺序线性表,数组就是一种常见的顺序线性表,他们在内存中的物理地址是连续的。在C/C++中可以用指针把一系列物理上不连续的地址链接起来构成逻辑上的连续,这就是链表。
在C++的STL中提供了一个叫做list<>的容器,它是一个双端链表,支持高效率的删除和插入操作。

“我想问的重点是 是不是学了容器就可以不用学链表的?”
---这个嘛,上面提到的list<>就是一种容器,而在STL中还有许多的其他容器。
我们在学习数据结构的时候老师不准我们使用STL的东西,我们要用一个链表,就得自己去写List类。但是在真正的项目中有谁会重写呢?直接STL就行了,当然如果对性能有特殊的要求的除外。链表是一种基本的数据结构,我想这是每一个用C++写程序的人应该知道的,弄清它的原理是没有坏处的。
至于你说的vector<>他一个单向容器,也就是说在STL中规定它只能在尾部插入和删除数据,但是可以高效的查找,耗时线性时间,直接给下标就行了。
而list<>支持高效的删除和插入操作,但是查找效率极低,因为他每次得从头开始查找。

希望回答没有跑题,呵呵!

链表相比vector更加底层了。
可以这么说,跟vector平级的相关容器可能是用链表来实现的,所以说vector用起来自然比链表容易些,而且功能强大些。