如何解决具有动态边框的动态4D数组C ++
我尝试制作一个4D数组,如果将WxXxYxZ的尺寸固定为W = 7,那似乎可以正常工作; X = 5,Y = 10,Z =2。但是我的代码需要适用于边框变化的尺寸:
int chainCount = 10;
int * beadCount = new int[N];// N >= chainCount
// for example: beadCount = { 5,7,8,...,12}
//4D array:
double **** r = new double*** [chainCount];
for(int i=0; i < chainCount; i++){
r[i] = new double**[beadCount[i]];
for(int j=0; j < beadCount[i]; j++){
r[i][j] = new double *[chainCount];
for(int k=0; k< chainCount;k++)
r[i][j][k] = new double[beadCount[k]];
}
}
/*
...
*/
for(int i=0; i < chainCount; i++){
for(int j=0; j < beadCount[i]; j++){
for(int k=0; k< chainCount;k++){
delete[] r[i][j][k];
}
delete[] r[i][j];
}
delete[] r[i];
}
delete[] r;
这总是会导致分段错误。但是只有当我使用beadCount [i]时,通过将beadCount [i]替换为固定的数字,它似乎才有效。
解决方法
我可以建议一种更好的方法吗?
将对象作为容器处理,其键是“四元组” (w,x,y,z).
如果特定的“维度”具有范围约束,则易于实现。如果您需要遍历元组,也可以这样做。但是容器只存储实际设置的值–所有其他元组键都返回默认值,例如0
或null
。
您可以在此处使用许多可用的容器类。您所需要的只是一个将元组转换成他们可以使用的某种键的函数。例如,sprintf()
可以做到。您的类的实现只需实例化一个“库存”容器类并使用它,同时还可以将其隐藏起来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。