什么是随机访问??

anequitousse 2013-02-28 11:19:34
我看书上写,链表没有提供对元素的随机访问,但是向量和双端队列提供随机访问。。这个随机访问是什么意思??
...全文
3957 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
derekrose 2013-03-01
  • 打赏
  • 举报
回复
一步直接得到该数据的首地址
dongfangmuge 2013-03-01
  • 打赏
  • 举报
回复 1
随机访问是说你可以随意访问该数据结构中的任意一个节点,假设该数据结构有10个节点,你可以随意访问第1个到第10个节点。 对于列表而言,如果其存在10个节点,如果你要访问第5个节点,你只能从列表的头或者尾,依次遍历相邻的每一个节点; 对于vector而言,你可以直接利用[]操作符,直接访问[4],不需要遍历其他的节点。 这就是随机访问。
zhuyf87 2013-03-01
  • 打赏
  • 举报
回复 1
比如first是第一个元素的地址,现在想访问第N个元素。 随机访问:直接first+N,便可以得到第N个元素的地址,因为这些相邻元素是按顺序连续存储的。 比如普通数组就是可随机访问的。 而链表不支持随机访问,链表存储的元素,它们的存储地址也不是连续的,是随机的。 要想访问第N个元素,只能从second = first->next遍历第2个元素,然后再three = first->next遍历第3个元素... 这样一直到第N个元素。所以这样的访问速度就没有随机访问快。
anequitousse 2013-02-28
  • 打赏
  • 举报
回复
引用 1 楼 Jinhao 的回复:
例如vector iterator i = v.begin() + N; 得到v中第N + 1个元素的迭代器。 vector的迭代器是随机访问的迭代器。因此可以直接通过+N的方法。 而list不是随机访问的,同样得到第N+1个元素的话就不能用+N的方法。 iterator i = l.begin(); std::advance(i, N);
那+N和advance()在具体实现上,有什么区别?
Jinhao 2013-02-28
  • 打赏
  • 举报
回复
例如vector iterator i = v.begin() + N; 得到v中第N + 1个元素的迭代器。 vector的迭代器是随机访问的迭代器。因此可以直接通过+N的方法。 而list不是随机访问的,同样得到第N+1个元素的话就不能用+N的方法。 iterator i = l.begin(); std::advance(i, N);

65,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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