比较特别的生成n维数组的方法。对于需要的维数,用下边的函数生成代码块,然后粘贴到需要的地方即可。
#include<stdio.h>
//n维数组代码生成器。
void _ndgenerator(const char* elemtype,int n)
{
if (elemtype == nullptr)throw(-1);
if (n <= 1 || n > 26)
{
printf("\n[n must be within 2~26.]\n");
return;
}
printf("\nstruct _%ddim\n{\n", n);
printf("\t%s* p;\n",elemtype);
printf("\tint A");
for (int i = 1, ch = 'B'; i < n; i++, ch++)printf(",%c", ch);
printf(";//p[A][B]...\n");
printf("\tint d0");
for (int i = 1; i < n; i++)printf(",d%d", i);
printf(";//d0:totalsize\n");
printf("\t_%ddim(int asize",n);
for (int i = 1, ch = 'b'; i < n; i++, ch++)printf(",int %csize", ch);
printf(")\n\t{\n");
printf("\t\tif(asize<=0");
for (int i = 1, ch = 'b'; i < n; i++, ch++)printf("||%csize<=0", ch);
printf(")throw(-1);\n");
printf("\t\tA=asize");
for (int i = 1, uch = 'B', ch = 'b'; i < n; i++, uch++, ch++)printf(",%c=%csize", uch, ch);
printf(";\n");
printf("\t\td%d=%c", n - 1, 'A' + n - 1);
for (int i = n-1,ch='A'+n-2; i >= 1; i--,ch--)printf(",d%d=d%d*%c", i - 1, i, ch);
printf(";\n");
printf("\t\tp = new(%s[d0]();\n\t}\n", elemtype);
printf("\t~_%ddim(void)\n\t{\n\t\tdelete[]p;\n\t}\n", n);
printf("\t%s& at(int a",elemtype);
for (int i = 1, ch = 'b'; i < n; i++, ch++)printf(",int %c", ch);
printf(")//p[a][b]...\n\t{\n");
printf("\t\tif(a<0||a>=A");
for (int i = 1, uch = 'B', ch = 'b'; i < n; i++, uch++, ch++)printf("||%c<0||%c>=%c",ch, uch, ch);
printf(")throw(-1);\n");
printf("\t\treturn p[a*d1");
for (int i = 1, ch = 'b'; i < n - 1; i++)printf("+%c*d%d", ch, i + 1);
printf("+%c];\n\t}\n", 'a' + n - 1);
printf("\t%s& operator()(int x)\n",elemtype);
printf("\t{\n\t\tif(x<0||x>=d0)throw(-1);\n");
printf("\t\treturn p[x];\n\t}\n};\n");
}
int main()
{
for (int i = 0; i < 128; i++)putchar('-');
for (int i = 0; i <= 26; i++)
{
_ndgenerator("int",i);
for (int i = 0; i < 128; i++)putchar('-');
}
}
以下是main函数的执行效果。

本文介绍了如何使用特定函数生成任意维度的数组。通过提供的代码块,用户可以在需要的地方快速粘贴并创建所需的n维数组。在main函数的示例中,展示了该方法的实际应用。
886

被折叠的 条评论
为什么被折叠?



