【发布时间】:2015-09-10 09:25:29
【问题描述】:
我需要创建一个支持以下操作的整数数据结构 -
- 在给定位置插入项目(添加项目位置)
- 从给定位置删除项目(删除位置)
- 随机选择任意给定位置(选择位置)
- 随机洗牌。
我需要保持一个头。由 () 表示。有关详细信息,请参阅示例。
Ex-
lets say my initial state is
(1) 2 3 4 5
Where () represents my current head
After Add 6 2
state - (1) 6 2 3 4 5
After Delete 5
state - (1) 6 2 3 5
After Select 3
state - 1 6 (2) 3 5
After shuffle
state - 5 (2) 6 1 3
shuffle will shuffle all the items randomly. But will preserve the head.
【问题讨论】:
-
这取决于很多事情,如果您期望少量元素(如 20 个或更少),则向量可能会更好。但是,对于大量元素,例如从向量中间插入和删除是昂贵的......
-
std::vector似乎可以解决问题。 -
@Kerrek SB 我绑定了数组,该数组涉及在项目之间插入和删除的情况下的项目移动。然后我也想到了链接列表。但我的大部分操作都涉及随机访问,所以链接列表不是一个好主意。我探索了 Array + Hash 的选项。我正在寻找是否有更好的选择,但我不知道。
-
根据经验,如果您没有特定理由来选择其他东西,那么向量就可以了。如果您有 6 个对象,则使用向量的程序将在另一个程序甚至分配链表中的第一个节点之前完成。
-
@LPs SO:s 的政策是,为什么有人需要答案并不重要。无论是关于初学者作业还是航天飞机固件,所有问题都必须符合相同的质量标准。因此,“闻起来像家庭作业”的 cmets 没有建设性或相关性。
标签: c++ c algorithm data-structures