媒体播放列表的数据结构
Data structure for a media playlist?
乍一看,双链表似乎是合理的,但当我开始实现时,我遇到了跟踪当前位置的问题。我已经使用了std::list迭代器,但是处理极端情况(参见下一部分)变得很痛苦。以下是DS的要求:
- 保持元素顺序
- 中间有效插入
- 插入/删除不会使迭代器失效
- O(N)随机访问不是问题
链表最适合它。
当前位置游标(迭代器)的要求:
- 双向
- 初始表示
end
位置 - 当迭代器位于
end
位置时,在末尾插入元素后,下一个迭代器前进将其移动到该元素。如果之前的播放列表为空,也会有相同的行为 - 相反的情况也一样:迭代器在开始,
push_front
,向后移动将会找到新添加的元素
实现它的最佳实践是什么?有相关的库吗(c++)?
std::list
是一个支持常量时间插入和从容器中的任何位置删除元素的容器。不支持快速随机访问(这在您的情况下不是问题)。它通常被实现为一个双链表。与std::forward_list
相比,该容器提供了双向迭代能力,但空间效率较低。
在列表内或跨多个列表添加、移除和移动元素不会使迭代器或引用失效。只有在删除相应元素时,迭代器才失效。
在我看来,std::list
非常适合你所描述的问题。
相关文章:
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- C++ 中带有列表的树数据结构
- 尝试创建排序的动态列表(数据结构)
- 如何将边缘列表转换为DCEL数据结构
- 如何检索指向列表数据结构中的变量的指针?
- Qt:通过深度复制访问列表中的数据结构是否应该比通过指针访问它慢得多
- 嵌套的C 常数数据结构,没有初始化列表或明确命名所有节点-VC 2012过早破坏了内部元素
- 在C++中,是否可以引用像C++中的stl列表这样的数据结构部分
- C++ 从文本文件数据类型读取为结构,并将数据存储在列表的向量中
- C++数据结构列表,在我的代码中
- 列表中的数据结构
- 说 C++ 中的数组或 Python 中的列表是一个类是否正确?数据结构?或两者兼而有之
- 用于处理 3 个整数列表的数据结构
- 如何使用智能指针(例如auto_ptr r shared_ptr)在 Linux 上的C++中生成链接列表数据结构
- 这是一个具有基于数组的列表函数的数据结构项目,我似乎无法摆脱这个无限循环。
- 如何从 CGAL 中的坐标和拓扑列表创建Polyhedron_3数据结构
- 用于存储地址的单列列表的数据结构,更好地在C++中查找O(1)
- 用于存储元组键的数据结构:参数关系列表
- 媒体播放列表的数据结构