哪一个更快,为什么?1.阵列2.链接列表.如果我们只想在for循环中迭代并打印它
Which one is faster and why? 1. Array 2. Link List. If we just want to iterate in for loop and print it
哪一个更快,为什么?1.阵列2。链接列表。如果我们只想在for循环中迭代并打印它,而不考虑cpu缓存。
无论对象存储在哪里,"打印它"部分都是相同的。
唯一不同的部分是"移动到下一个项目"。
对于一个数组,它涉及到增加一个指针——很可能是CPU中最快的操作。
对于链表,它涉及到从内存加载一个值——这是一个非常快的操作,但不如递增快。
还有其他的担忧。数组将是连续的,并且比链表占用更少的总体空间,这意味着可以更好地使用缓存。
但是,请记住——两者都快得惊人——但是,数组会稍微快一点。
差异可以忽略不计。这将取决于如何编写循环,以及编译器中的优化。如果您在gui中将其打印到屏幕上,那么这本身将比两者加在一起有更多的开销。
假设您的查询只是关于顺序访问的。
对于顺序访问,阵列在任何给定时间都会更快,主要原因是更新的CPU为此进行了优化。
如果我们忽略CPU优化,即使在那之后阵列访问也会更快。让我们看看这两种操作的步骤,这将有助于理解原因。
阵列访问:
int a[10];
int *ptr = a;
访问下一个元素就是进行
*(ptr++);
所涉及的操作是
1.ptr的读取值
2.将当前值增加1
3.访问新地址
链表:
Node {
int data;
Node* next;
};
访问下一个数据将是这个
(*(node->next))->data;
- 节点的读取值
- 移入地址表以联系下一个成员
- 读取next的值
- 访问next的值
希望这能帮助你理解为什么数组访问会更快。当您为阵列1&2将被进一步优化。话虽如此,在实际应用中,您会感觉到的差异可以忽略不计
数组比链表更快。主要是因为数组连续存储所有元素。基本链接列表不能保证后续访问。
不考虑cpu缓存是一个非常奇怪的假设,因为主要是缓存提供了在链表上使用数组的主要性能。
链表具有将元素相互连接的指针,而数组并没有这种加重的结构。您对数组进行迭代,但不直接对链表进行迭代。
你不应该用大O符号来进行数学比较,因为这会给出相同的性能("细节中的魔鬼")。
与LinkedList相比,数组总是更快。。数组将数据直接存储到内存位置。Linkedlist将创建节点,向节点添加数据,然后存储它。再次迭代时,Linkedlist会使用指针指向下一个元素并打印,而在数组中,u只提供从0到sizeof array的位置。。。
- 我只想在Android 4.4中使用C++11库
- 我想在 C++ 中使用 for 循环创建类对象
- 我只想获得高质量的功能点
- 为什么 for 循环只接受这个简单代码中的最后一个字符串?
- cuda 和 opencv:我只想要与原始图片相同的图片
- C++:使用数组、指针和 for 循环制作直方图。我就在那里,我可能想得太辛苦了
- 想知道为什么我不能只捕获协程的 asio::handler_type 的引用
- 我想反转地图的值并使用基于范围的 for 循环打印它
- 我只想从文本文件中删除一个特定值或行
- 为什么有时人们更喜欢Strtoll而不是Strtol,即使他们只想将字符串转换为INT32
- 当我只想禁用自定义赋值运算符=()的签名时,它是否重要
- 我试图证明一个给定的树是一个二进制搜索树.我将输入一个二叉树,我只想让函数返回true
- 如果我只想要架构良好的工作区,但不一定是分开的编译,如何在C++中组织头/代码文件
- Qt GUI-只想在值更改时读取.txt文件
- 当一个进程崩溃时,我怎么能压制所有的错误对话框(我只想让它安静地崩溃)
- 如果我只想在模板中专门研究一种方法,我该怎么做
- 访问一个我只想存在于派生类中的函数
- 哪一个更快,为什么?1.阵列2.链接列表.如果我们只想在for循环中迭代并打印它
- 如果我只想读取数字,我如何忽略文本文件中的单词?
- 如果我只想指定哈希函数,我应该传递给unordered_map的存储桶计数参数什么?