对于声明这种数组感到困惑

时间:2014-10-12 08:30:59

标签: c++ arrays std-pair

我正在阅读此code

有一行:pair <int, int> approach[1 << 18][17]

我不知道这个声明的含义是什么:approach[ 1<<18 ][17];

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

在此上下文中,<<是位左移位运算符。 1 << 18表示取1的二进制表示,并将其向左移18。这是2 18 (2到幂18,或262144) 。所以你有一个非常大的二维数组:

pair <int, int> approach[262144][17];

答案 1 :(得分:2)

<<是左移位运算符。

所以1 << 18是一个整数常量,其值为2 18

答案 2 :(得分:1)

它仅仅意味着2 ^ 18,2代表18的力量。

代码缺少一些解释,唯一真正好的信息是

// SGU 502 -- Digits Permutation

啊它关于数字排列,所以

pair <int, int> approach[1 << 18][17]

可能用于存储排列,除非排列有一些限制,排列的数量应为N! (希望N!&lt; =(1&lt;&lt; 18)。

但是这个定义并没有说明这一点,让我们看看我们是否可以让它更清晰(并且希望是正确的)。

const int maxLength = 17;
const int maxPermutation = 1 << (maxLength+1);
pair <int, int> approach[maxPermutation ][maxLength]
static_assert(factorial(maxLength) <= maxPermutation, "approach might not be able to hold all permutations");