gpt4 book ai didi

c++ - 在 C++ 中制作奇数维多维数组的最佳方法?

转载 作者:行者123 更新时间:2023-11-30 04:34:39 26 4
gpt4 key购买 nike

我编写了以下函数,通过根据需要添加行或列来使二维数组对象成为奇数维(其中 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;
}

}

我的问题:是否有更清洁/更有效的方法来做到这一点?

非常感谢...

最佳答案

我认为先检查行数会更容易,如果需要再将其扩展 1。然后,检查列数,如果需要,每列增加 1。

假设您的 grid2dvector<vector<T> > 的包装器,您可以将值传递给 resize它将用于填充新创建的空间,因此当您添加一行时,您可以只传递当前的最后一行以将其复制到新的最后一行。

关于c++ - 在 C++ 中制作奇数维多维数组的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com