请问stl得list和vector有什么区别?

wuyan 2001-12-26 08:52:18
加精
我在学习使用stl的过程中,觉得用list和用vector没什么区别,所能使用的方法都差不多,只是觉得vector会稍微会点。究竟list和vector各自适用在什么场合,我却没有一点头绪。

...全文
9082 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
holylaker 2002-02-05
  • 打赏
  • 举报
回复
SGI STL的源代码及文档下载:
http://www.sgi.com/tech/stl/download.html
BeginSC 2002-01-18
  • 打赏
  • 举报
回复
关注
forestsunlight 2002-01-09
  • 打赏
  • 举报
回复
请问那里能看到sgi stl的源代码!?

ylong 2001-12-26
  • 打赏
  • 举报
回复
faint,当然是到书店了!Stroustrup所著C++第一经典著作,当然现在只有
英文版的,中文版估计三个月之内能够上市。

另外,如果想更深入的了解stl,建议看看sgi stl的源代码!
wuyan 2001-12-26
  • 打赏
  • 举报
回复
请问在哪可以找到the C++ Programming Language
ylong 2001-12-26
  • 打赏
  • 举报
回复
还有其它很多种容器,如queue,stack,map等,分别适用于不同的需要,如要全面掌握,
建议看the C++ Programming Language。
wuyan 2001-12-26
  • 打赏
  • 举报
回复
基本同意云龙的看法,在使用过程中vector却是没有pop_front,push_front的。
但我在简单测试vector和list的时候,在连续插入一百万条数据时,vector的速度会比list稍微会一点点。

非常感谢大家!
panjet 2001-12-26
  • 打赏
  • 举报
回复
啊,原来是这样呀!

wuyan:你看明白了吗?


ylong 2001-12-26
  • 打赏
  • 举报
回复
我来谈谈我的看法:

stl提供了三个最基本的容器:vector,list,deque。

vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此
它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间
进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新
申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。

list就是数据结构中的双向链表(根据sgi stl源代码),因此它的内存空间可以是不连续
的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它
没有提供[]操作符的重载。但由于链表的特点,它可以以很好的效率支持任意地方的删除
和插入。

deque是一个double-ended queue,它的具体实现不太清楚,但知道它具有以下两个特点:
它支持[]操作符,也就是支持随即存取,并且和vector的效率相差无几,它支持在两端的
操作:push_back,push_front,pop_back,pop_front等,并且在两端操作上与list的效率
也差不多。

因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面
的原则:
1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

个人见解,如有不同意见,欢迎讨论!
stl_liu 2001-12-26
  • 打赏
  • 举报
回复
从操作方法上看,二者没有多少区别,但在执行不同操作时性能有差别:
vector对任意元素的存取是等时的(const time),所以适合随机访问,对插入和删除则比较慢
list比较适合遍历访问,随机访问比较慢,但插入和删除速度比较快

我感觉,二者的差别主要是语义上的。一般情况下,当需要频繁地删除和插入操作,应采用list,否则用vector.

请参考rainday推荐的文章
prealfa 2001-12-26
  • 打赏
  • 举报
回复
两者的区别其实就是C中的数组和链表的区别,只不过在C++中的GP中将其进行封装了,使其
与数据类型无关.向进一步了解,听rainday(雨后的蘑菇)的.

xddjd 2001-12-26
  • 打赏
  • 举报
回复
就象数组和链表的关系,vector一个是连续存储,跟数组的访问方法差不多,list就跟链表一样,靠连接关系,可以连续存储与访问,也可以不连续。
panjet 2001-12-26
  • 打赏
  • 举报
回复
你们说的我都看过了,可是我还是不明白,让我去死吧!.......
北极猩猩 2001-12-26
  • 打赏
  • 举报
回复
vector内部使用线性内存分配,可以随机访问,支持operator[]
list内部使用练是数据结构,不支持随机访问和operator[]
rainday 2001-12-26
  • 打赏
  • 举报
回复
还建议你从字面意义上理解一下它们的意义

rainday 2001-12-26
  • 打赏
  • 举报
回复
建议你看看 程序员 某期(我忘了)中有关generic peogramming 讨论中
一篇对vector deque list进行性能比较的文章
rainday 2001-12-26
  • 打赏
  • 举报
回复
vector 内部实现-分配内存方式与list不同 no "insert"
panjet 2001-12-26
  • 打赏
  • 举报
回复
vector是容器,容器可以装载任何数据类型,
list是链表,链表好像也可以链接任何数据类型,

他们有没有比较明显的差异,各适应什么样的场合,该如何选择使用之.

gigix 2001-12-26
  • 打赏
  • 举报
回复
vector是向量,list是链表。
panjet 2001-12-26
  • 打赏
  • 举报
回复
我也想知道,欢迎过来人指点!
期待中......

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧