在boost::multi_array的维度上迭代
Iterating over the dimensions of a boost::multi_array
我正在尝试使用boost::multi_array为c++中的模板类编写一些与维度无关的代码(尽管如果其他容器/数据结构在这方面做得更好,我很乐意听到它)。
给定一个维度,我想遍历其他所有维度的整个范围,沿着所选维度返回1d视图。这是相当简单的,或者至少它看起来来自boost文档。
当数组的维度在编译时已知时,我不知道如何在数组的所有维度上迭代选定的维度。
有什么建议吗?
通常情况下,您可以使用boost::multi_array来完成此操作,下面是一些示例代码,用于创建3D multi_array:的2D视图
#include "boost/multi_array.hpp"
#include <cassert>
#include <iostream>
int main()
{
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
array_type myArray3D(boost::extents[3][4][2]);
// Assign values to the elements
int values = 0;
for (index i = 0; i != 3; ++i)
{
for (index j = 0; j != 4; ++j)
{
for (index k = 0; k != 2; ++k)
{
myArray3D[i][j][k] = values++;
}
}
}
// Verify values
int verify = 0;
for (index i = 0; i != 3; ++i)
{
for (index j = 0; j != 4; ++j)
{
for (index k = 0; k != 2; ++k)
{
std::cout << "[" << i << "]";
std::cout << "[" << j << "]";
std::cout << "[" << k << "] = ";
std::cout << myArray3D[i][j][k] << std::endl;
assert(myArray3D[i][j][k] == verify++);
}
}
}
typedef boost::multi_array_types::index_range range;
array_type::index_gen indices;
// Create a new view with 2 dimentions fixing the 2nd dimention to 1
array_type::array_view<2>::type myView =
myArray3D[indices[range()][1][range()]];
std::size_t numDims = myView.size();
std::cout << "numDims = " << numDims << std::endl;
for (index i = 0; i != 3; ++i)
{
for (index j = 0; j != 2; ++j)
{
std::cout << "[" << i << "]";
std::cout << "[" << j << "] = ";
std::cout << myView[i][j] << std::endl;
}
}
return 0;
}
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 向后迭代 std::array 或 std::vector 的正确方法是什么?
- 如何从map<pair<string,int>,pair<string,Array>>中迭代和查找?
- 为什么迭代 std::array 比迭代 std::vector 快得多?
- 为什么通过"std::vector"迭代比通过"std::array"迭代更快
- 原始数组和 std::array 在 clang++ 和 VC++ 上的不同迭代器行为
- 迭代器 - vector::itrator 和 array::iterator 的重载函数
- c++ -为std::array迭代器的std::数组创建别名
- 迭代程序是否比array[i]快