在C ++中使多维数组奇数维的最佳方法?
|
我编写了以下函数,通过根据需要添加行或列来使二维数组对象成为奇数维(其中sizeX,sizeY,get,set和resize是不言自明的grid2D成员函数)。
void makeOdd(grid2D<double> *pSrc)
// ---------------------------------------------------------------------------------------------------------
// Make one or both dimensions of input array odd (via row/column copy).
{
// Variable declarations
grid2D<double> pTmp = *pSrc; // Scratch local source variable
int simax, sjmax; // Source dimensions
// Get source dimensions
sjmax = pSrc->sizeY();
simax = pSrc->sizeX();
// Check if source is already odd-dimensioned
if (sjmax%2 && simax%2) return;
// Extend row/column of source if necessary
if (sjmax%2 && !(simax%2)) // Odd rows, even columns
{
pSrc->resize(simax+1,sjmax); // Resize source with extra column
for(int i=0; i<simax+1; i++)
{
for(int j=0; j<sjmax; j++)
{
if(i==simax)
pSrc->set(i,j,pTmp.get(simax-1,j)); // Copy last column
else
pSrc->set(i,j,pTmp.get(i,j));
}
}
return;
}
else if (!(sjmax%2) && simax%2) // Even rows, odd columns
{
pSrc->resize(simax,sjmax+1); // Resize source with extra row
for(int i=0; i<simax; i++)
{
for(int j=0; j<sjmax+1; j++)
{
if(i==simax)
pSrc->set(i,j,pTmp.get(i,sjmax-1)); // Copy last row
else
pSrc->set(i,j,pTmp.get(i,j));
}
}
return;
}
else // Even rows, even columns
{
pSrc->resize(simax+1,sjmax+1); // Resize source with extra row and column
for(int i=0; i<simax+1; i++)
{
for(int j=0; j<sjmax+1; j++)
{
if(i==simax && j==sjmax)
{
pSrc->set(i,j,pTmp.get(simax-1,sjmax-1)); // Copy last column and row
}
else if(i==simax && j<sjmax)
{
pSrc->set(i,j,pTmp.get(simax-1,j)); // Copy last column
}
else if(i<simax && j==sjmax)
{
pSrc->set(i,j,pTmp.get(i,sjmax-1)); // Copy last row
}
else
{
pSrc->set(i,j,pTmp.get(i,j));
}
}
}
return;
}
}
我的问题:是否有一种更清洁/更有效的方法?
非常感谢...
没有找到相关结果
已邀请:
2 个回复
焙恍挝厂熄
,它将用于填充新创建的空间,因此,当您添加一行时,您只需传递当前的最后一行即可将其复制到新的last中行。
绵扇寸访
当然,根据ѭ5,如果知道对象的内部结构而不是使用公共的调整大小/获取/设置接口(例如通过使making6成为方法),则可能会更简单。 顺便说一下,在原始代码中,您正在复制指针(不是原始对象)的副本
;这也没有意义。