【发布时间】:2022-11-25 05:57:00
【问题描述】:
我最近参加了两次工作面试,两次我都说了 vector,因为我的常识告诉我,因为访问堆上的内存比较慢。然而,链表和向量都将它们的元素存储在堆上。面试官似乎对我的回答不满意,即使我答对了。
有人可以给我这两个面试问题的教科书式答案吗?
什么可以更快地迭代,什么可以更快地创建新元素?向量还是链表?为什么?
为什么访问元素或在矢量上创建新元素更快?
【问题讨论】:
-
容器是否分类?
-
address + 4或root->next->next->next->next哪个看起来更快? -
“存储在堆上”不是相关部分。相关的是每个单独元素的存储位置,这将回答您的两个问题
-
仅供参考,元素的位置无关紧要,除非它们被整理(如矢量)。从堆、堆栈或全局区域访问数据之间没有速度差异。
-
更正。如果链表节点足够近,可以位于同一缓存行或可以放入缓存中,则可以以与向量相同的速度访问它们(同样,取决于容器的大小以及它是否可以放入缓存中)处理器的数据缓存)。
标签: c++ vector linked-list