如果我有std::array<std::array<int, 4>, 4> mydata
,我将如何将其拆分为更小的块或std::array<std::array<int, 2>, 2>
,所以它看起来像这样(视觉上):
每种颜色是一个std::array<std::array<int, 2>, 2>
?
我已经阅读了一些问题,但他们并不总是问相同或不完整:
Split array into chunks in C/C++ - 询问如何将一个连续的数据流拆分成较小的连续位,一维
Split an image into 64x64 chunks - 没有为ProcessChunk
提供来源或解释?
答案 0 :(得分:1)
我这样做的方法是不分割图像。
让我详细说明:
如果你创建新的数组,你将不得不在一些新的结构上复制数组,可能是std :: vectors,因为你不知道编译时的不同大小。
你可以做的是保持原始结构,并有一个区域矢量,其中一个区域由描述你的内部正方形的4个顶点描述。
struct Area{
std::pair<int,int> topleft;
std::pair<int,int> topright;
std::pair<int,int> bottomleft;
std::pair<int,int> bottomright;
};
vector<Area> areas;
areas.emplace_back({0,0},{0,2},{2,0},{2,2});
如果您需要使用较少的信息,您只能存储两个角并计算另外两个角,实际上只需要4个整数来了解该区域。
答案 1 :(得分:0)
编写自己的函数来完成它。它非常简单,类似于:
Array3D splitArray(Array2D inArray, uint rows, uint cols)
{
//Check if the array size are > 0, skipping this to save time
//Check if the arrays
size_t inSize1 = inArray.size();
size_t inSize2 = inArray[0].size();
if rows > inSize1 || colus > inSize2 || inSize1 % rows != 0 || inSize2 % cols != 0
{
//throw an exception
}
//The arrays split requested is OK, copy the data:
//Loop over the inArray and copy the appropriate cells in a temp 2D array
//then add that to an array of 2D arrays:
std::Array<Array2D> results;
return results;
}