媒体播放列表的数据结构?

时间:2016-09-05 09:01:02

标签: c++ data-structures linked-list media-player playlist

乍一看,双链表似乎合情合理,但在我开始实施时,我遇到了跟​​踪当前位置的问题。我使用过std :: list迭代器,但处理极端情况(见下一部分)变得很痛苦。 以下是DS的要求:

  • 保留元素'为了
  • 有效插入中间
  • 插入/删除不会使迭代器失效
  • O(N)随机访问不是问题

链接列表最适合它。

当前位置光标(迭代器)的要求:

  • 双向
  • 最初表示end位置
  • 当迭代器在end位置时,在最后插入元素之后,下一个迭代器advance将把它移动到这个元素。如果以前播放列表为空,则表示相同的行为
  • 相反的情况相同:开头的迭代器push_front向后移动将使用新添加的元素

实施它的最佳做法是什么?是否有适合它的库(C ++)?

1 个答案:

答案 0 :(得分:1)

std::list是一个容器,支持从容器中的任何位置继续插入和删除元素。不支持快速随机访问(在您的情况下这不是问题)。它通常被实现为双向链表。与std::forward_list相比,此容器提供双向迭代功能,同时节省空间。

添加,删除和移动列表中的元素或跨多个列表不会使迭代器或引用无效。只有删除相应的元素时,迭代器才会失效。

从我的观点来看,std::list非常适合您所描述的问题。