我理解这样做的算法,但我不知道什么数据结构(数组,链表,矢量,其他?)最适合返回最后一组集,因为我看到的每个例子都要求打印集。
要清楚,我的意思是所有子集,因此它们的大小不同。
答案 0 :(得分:2)
决定使用哪种数据结构取决于:
普通数组会给你连续的内存块和对元素的随机访问,但是你需要事先知道元素的确切数量,这样你才能分配一个合适大小的数组。
使用std::vector
,您可以随机访问数据,并且像数组一样连续但矢量是动态数组,它会随着您添加新元素而增长,并且分摊常量复杂度,但元素的插入/删除是因为所有元素都需要移动,所以只能在结尾处更快。
使用std::list
,您无法获得随机访问权限,但元素的插入和删除速度更快,因为它只涉及移动指针链接。
此外,矢量甚至已经被使用了吗?
这根本不是真的
它们非常广泛使用,是标准库提供的最广泛使用的数据结构之一。
答案 1 :(得分:1)
一旦我使用位字段来确定子集。如果i
位为1
,则在子集中选择集合中的i
,否则选择0
。在这种情况下,您需要存储元素的顺序。我认为可以使用bool
向量进行相同的操作。