社区
C语言
帖子详情
请问stl得list和vector有什么区别?
wuyan
2001-12-26 08:52:18
加精
我在学习使用stl的过程中,觉得用list和用vector没什么区别,所能使用的方法都差不多,只是觉得vector会稍微会点。究竟list和vector各自适用在什么场合,我却没有一点头绪。
...全文
9082
20
打赏
收藏
请问stl得list和vector有什么区别?
我在学习使用stl的过程中,觉得用list和用vector没什么区别,所能使用的方法都差不多,只是觉得vector会稍微会点。究竟list和vector各自适用在什么场合,我却没有一点头绪。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
我也想知道,欢迎过来人指点!
期待中......
STL
中
vector
、
list
、deque和map的
区别
STL
中
vector
、
list
、deque和map的
区别
vector
list
map pair
stl
标准模板库 c++
vector
list
map pair
stl
标准模板库 c++ 程序示例
C++
STL
函数应用
C++
STL
函数算法精讲+刷题实战,包括16个常用
STL
函数,
vector
/stack/queue/deque/priority_queue、
list
/bitset/set/multiset/map/multimap等函数应用和刷题实战。
C++
STL
vector
容器介绍
该文档详细讲解了C++中标准容器的使用,是一份不错的学习资料哦
C++
STL
vector
list
map set dqueue 等应用举例及PPT讲解示例,代码演示
C++
STL
vector
list
map set dqueue 等应用举例及PPT讲解示例,代码演示
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章