用于返回集合的所有子集的适当数据结构

时间:2012-02-09 05:21:22

标签: c++ data-structures stl

我理解这样做的算法,但我不知道什么数据结构(数组,链表,矢量,其他?)最适合返回最后一组集,因为我看到的每个例子都要求打印集。

  1. 有人可以解释我在提到的3个数据结构之间做出决定的思考过程吗?
  2. 此外,矢量甚至已经被使用了吗?我听说他们已经过时但仍然看到很多最近的例子。
  3. 要清楚,我的意思是所有子集,因此它们的大小不同。

2 个答案:

答案 0 :(得分:2)

决定使用哪种数据结构取决于:

  • 要存储的数据类型
  • 您打算对数据执行的操作

普通数组会给你连续的内存块和对元素的随机访问,但是你需要事先知道元素的确切数量,这样你才能分配一个合适大小的数组。

使用std::vector,您可以随机访问数据,并且像数组一样连续但矢量是动态数组,它会随着您添加新元素而增长,并且分摊常量复杂度,但元素的插入/删除是因为所有元素都需要移动,所以只能在结尾处更快。

使用std::list,您无法获得随机访问权限,但元素的插入和删除速度更快,因为它只涉及移动指针链接。

此外,矢量甚至已经被使用了吗?
这根本不是真的 它们非常广泛使用,是标准库提供的最广泛使用的数据结构之一。

答案 1 :(得分:1)

一旦我使用位字段来确定子集。如果i位为1,则在子集中选择集合中的i,否则选择0。在这种情况下,您需要存储元素的顺序。我认为可以使用bool向量进行相同的操作。