gpt4 book ai didi

c++ - Boost::multi_array 循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:49 26 4
gpt4 key购买 nike

我看过this post它解决了如何使用 boost::multi_array::origin() 函数循环遍历不是从零开始的数组,但这只会创建一个循环。

如何遍历multi_array的每一维,例如:

for(index i = <origin of dim 1>; ...) {
for(index j = <origin of dim 2>; ...) {
for(index k = <origin of dim 3>; ...) {
myArray[i][j][k] = <something>;
}
}
}

当给定一个上限和下限都未知的数组时?

最佳答案

index_bases 成员函数返回一个容器,其中包含每个维度的索引基数。 shape 成员函数返回一个容器,其中包含每个维度的范围(大小)。您可以使用这两者来确定每个维度的索引范围:

typedef boost::multi_array<int, 3> array_type;

void printArray(const array_type& a)
{
// Query extents of each array dimension
index iMin = a.index_bases()[0];
index iMax = iMin + a.shape()[0] - 1;
index jMin = a.index_bases()[1];
index jMax = jMin + a.shape()[1] - 1;
index kMin = a.index_bases()[2];
index kMax = kMin + a.shape()[2] - 1;

for (index i=iMin; i<=iMax; ++i)
{
for (index j=jMin; j<=jMax; ++j)
{
for (index k=kMin; k<=kMax; ++k)
{
std::cout << a[i][j][k] << " ";
}
}
}
}

int main()
{
typedef array_type::extent_range range;
typedef array_type::index index;
array_type::extent_gen extents;

// Extents are hard-coded here, but can come from user/disk.
array_type a(extents[2][range(1,4)][range(-1,3)]);

// Populate array with values...

// Pass the array to a function. The function will query
// the extents of the given array.
print(a);

return 0;
}

关于c++ - Boost::multi_array 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179389/

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