#如果!定义的HAVE_RULER_FUNC_H__#定义HAVE_RULER_FUNC_H__//此文件是FXT库的一部分。//版权所有(C)2010、2011、2012、2014、2019、2023 Joerg Arndt//许可证:GNU通用公共许可证版本3或更高版本,//请参阅主目录中的文件COPYING.txt。#包括“fxttypes.h”//如果已定义,则使用数组而不是指针:#定义RULER_FUNC_MAX_ARRAY_LEN 64//加速类规则func//标尺函数(基于零),2-n的赋值:// 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 4 0 1 0 2 0 1 ...//无回路算法(Knuth方法的专门化//混合基数格雷码)。//参考OEIS序列A007814。{公众:#如果!定义的RULER_FUNC_MAX_ARRAY_LENulong*f;//焦点指针#其他ulong f_[RULER_FUNC_MAX_ARRAY_LEN+2];#结尾ulong n;ruler_func(const-ruler_func&)=删除;ruler_func&运算符=(const ruler_func&)=删除;公众:显式规则func(ulong n){#如果!定义的RULER_FUNC_MAX_ARRAY_LENn=n;f=新ulong[n+2];#其他n_=RULER_FUNC_MAX_ARRAY_LEN;n+=(n^n);//避免警告未使用的变量n#结尾first();}~ruler_func(){#如果!定义的RULER_UNC_MAX_ARRAY_LEN删除[]f;#结尾}void first(){对于(ulong k=0;k-->