以下是定义:
int n,m;
struct arr_T{
int az[NM_];
void init(int v){
memset(az,v,sizeof(az));
}
int* operator [] (const int &idx){
return az+idx*(n+2);
}
}a,prmx,prmn,sfmx,sfmn;
这个结构体大概就是一个总大小固定但两维长度可变的数组类型。
我要以同样的方式输出 prmx,prmn,sfmx,sfmn 四个数组,显然复制粘贴两层循环十分难看,我又一时没想到可以写函数,于是我想到了这个逆天写法:
for(auto &pr:
std::vector<
std::pair<arr_T,const char*>
>{
{prmx,"prmx"},{prmn,"prmn"},
{sfmx,"sfmx"},{sfmn,"sfmn"}
}){
printf("%s:\n",pr.second);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%d ",pr.first[i][j]);
}
putchar('\n');
}
}
就是不知道那四个“数组”会不会被复制……