我想在 C++中生成所有基数k
子集。{0, 1, 2, ..., n-1}
在 Haskell 中,我会这样做:
sets 0 n = [[]]
sets k n = [i:s | i <- [0..n-1], s <- sets (k-1) i]
或者在 Python 中:
def sets(k, n):
if k == 0:
return [()]
return ((i,)+s for i in range(n) for s in sets(k-1, i))
因此,例如,(为清楚起见添加了换行符)
ghci> sets 2 8
[[1,0],
[2,0],[2,1],
[3,0],[3,1],[3,2],
[4,0],[4,1],[4,2],[4,3],
[5,0],[5,1],[5,2],[5,3],[5,4],
[6,0],[6,1],[6,2],[6,3],[6,4],[6,5],
[7,0],[7,1],[7,2],[7,3],[7,4],[7,5],[7,6]]
这样做的“C++方式”是什么?请注意,我不是在问如何解决问题。我在问什么数据类型会被 C++ 程序员认为是“正常的”。
(作为参考,我对 C++ 有点熟悉,对 C 有点熟悉。)