比较特别的生成n维数组的方法

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

比较特别的生成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函数的执行效果。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值