![]() |
1
144
让我列出不同之处:
|
![]() |
2
67
来自(已过时但仍然非常有用)
SGI STL
总结
下面是关于这个问题的总结
总之,容器可能有共享的例程,但是 这些例程的时间保证因容器而异 . 在考虑将这些容器中的哪一个用于任务时,这一点非常重要:考虑 怎样 最常用的容器(例如,更多用于搜索而不是插入/删除)在引导您找到正确的容器方面有很大的帮助。 |
![]() |
3
13
|
![]() |
4
8
另一个重要保证是每个不同容器在内存中存储数据的方式:
请注意,deque的设计目的是 尝试
|
![]() |
5
4
否。deque仅支持在前后插入和删除O(1)。例如,它可以在具有环绕的向量中实现。因为它还保证了O(1)随机访问,所以可以确定它没有(仅仅)使用双链接列表。 |
![]() |
6
2
两者之间的显著差异
希望我能分享一些有用的信息。 |
![]() |
7
2
我为我的C++课上的学生做了插图。 这是基于(大致上)我对GCC STL实现中的实现的理解( https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_deque.h 和 https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_list.h )
您有一个列有内存块的数组(在GCC实现中称为map)。所有内存块都已满,但第一个内存块开头可能有空间,最后一个内存块结尾可能有空间。地图本身是从中心向外填充的。这就是为什么,与
双链表
双链表可能更常见。每个元素都存储在自己的内存块中,独立于其他元素进行分配。在每个块中,都有元素的值和两个指针:一个指向前一个元素,一个指向下一个元素。它使在列表中的任何位置插入元素变得非常容易,甚至可以将元素的子链从一个列表移动到另一个列表(一个称为 ):您只需更新插入点开始和结束处的指针。缺点是,要通过索引查找一个元素,必须遍历指针链,因此随机访问在列表中的元素数量上具有线性成本。 |
![]() |
8
1
其他人已经很好地解释了性能差异。我只想补充一点,在面向对象编程中,相似甚至相同的接口是很常见的——这是编写面向对象软件的一般方法的一部分。你不应该仅仅因为两个类实现了相同的接口就认为它们的工作方式相同,正如你不应该因为两个类都实现了attack()和make_noise()而认为一匹马像狗一样工作一样。 |
![]() |
9
1
这里是一个概念验证代码,使用列表、无序映射,提供O(1)查找和O(1)精确的LRU维护。需要(非擦除的)迭代器才能在擦除操作中生存。计划在一个O(1)任意大的软件管理缓存中使用GPU内存上的CPU指针。向Linux O(1)调度程序点头(每个处理器的LRU<->运行队列)。无序的_映射通过哈希表具有恒定的时间访问。
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
![]() |
The Great · 拆分并存储数据帧,但名称基于特定列中的唯一值 2 年前 |
![]() |
Klimt865 · Python中的列表列表 2 年前 |
![]() |
Klimt865 · 在Python中将数组列表转换为列表列表 2 年前 |