有没有简单的方法来动态增加 boost::multi_array 维度
Are there easy ways of increasing boost::multi_array dimension dynamically?
与使用 std::vector 创建多数组相比,boost 中的 MultiArray 具有很多优势。但是,我对 BOOST 中的多阵列感到不舒服的一件事是,创建一个可以轻松更改其大小的多阵列并不容易。我有以下代码来阐明我的观点:
vector<vector<int> > my_2d_array;
vector<int> temp;
temp.push_back(3);
temp.push_back(4);
my_2d_array.push_back(temp);
temp.clear;
temp.push_back(4);
temp.push_back(5);
my_2d_array.push_back(temp);
temp.clear;
temp.push_back(41);
temp.push_back(51);
my_2d_array.push_back(temp);
从上面的代码中我们可以看到,使用vector<vector<int> >
数据结构,我们可以很容易地增加多数组的维度。但是使用 boost::multi_array,您必须使用boost::extents
来确定多数组的维度,然后再使用它。我想知道 boost::multi_array 是否也像上述代码中的vector<vector<int> >
那样轻松增加其维度。
myarray.reshape(extents[newSizeY][newSizeX]);
工程。顺便说一句,你不能做这样的事情
boost::multi_array<int,2> foo;
// Reshape first before the following call
foo = some_function_that_returns_multi_array()
这让我抓了好几次。你必须重塑
使用 multi_array 的优点是数据存储在一个连续的块中,这有助于更好的缓存局部性,但在"实际"测试中,我注意到有时使用简单的 std::array<> 仍然可以获得显着的性能改进,但是 YMMV
相关文章:
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- OpenGL VBO Indexing ( How to compute Index Array)
- 标准::unordered_map 中的 std::array 的值初始化
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 将 **float array 从 C++ Dll 传递给 python
- std::bind on statd::array 的运算符 []
- 检查输入 std::array 指针数据是否等于某个常量数组
- 我可以安全地复制矢量<array>吗?
- 解析问题 - 预期的非限定 ID - #include <array> 编译错误
- 如何读/写或遍历 std::array 中的特定元素范围?
- 通过 host() 从 af::array 检索数据会导致错误的数据
- "dynamically allocated memory emulating multi-dimensional array"的正确术语?