如何使用(Boost多维数组库)来构造一个动态二维数组
How to use the (the Boost Multidimensional Array Library) to construct a dynamic two-dimensional array?
我需要帮助使用boost多维数组。我需要构造一个二维数组其中(0 <= j <= 1)并且(I)根据
动态增长long boostArray[i][j];
因此,这就像构造一个(未知的)列和两行的表。我已经从Boost Library网站提供的示例开始了:
#include "boost/multi_array.hpp"
#include <cassert>
int main () {
// 3 x 4 x 2
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
array_type A(boost::extents[3][4][2]);
int values = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
A[i][j][k] = 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)
assert(A[i][j][k] == verify++);
return 0;
}
问题是我没有完全理解上面的代码,以便调整其结构并构建我想要的数组。我不确切地知道如何添加/删除元素到/从我的数组,而使用Boost库,特别是如果这个数组如我上面所描述的动态增长。
例如,当处理向量时,我倾向于在调整向量大小后使用:push_back和pop_back。
对于您的特定用例,您可能最好使用vector<pair<T,T>>
或vector<array<T,2>>
。然后你可以使用push_back
,这是有效的。boost::multi_array
听起来有点过分,otoh:
你不能在那里使用push_back
之类的东西,因为每当你扩展N
维数组的一个维度时,你需要提供初始数据的N-1
维切片。这通常不是很有效,特别是因为您只能以这种方式添加最大步幅的维度。您需要使用的是resize
和赋值。
// std::vector<> equivalent (with vector<>, it's considered bad style)
v.resize( v.size() + 1 );
v[v.size()-1] = newElement;
// boost::multi_array (from the tutorial)
typedef boost::multi_array<int, 3> array_type;
array_type::extent_gen extents;
array_type A(extents[3][3][3]);
A[0][0][0] = 4;
A[2][2][2] = 5;
// here, it's the only way:
A.resize(extents[2][3][4]);
assert(A[0][0][0] == 4);
// A[2][2][2] is no longer valid.
重申一下:N
维数组,即N>2
,本质上比一维数组的动态性要低得多(因为跨步因素)。上面的调整大小需要大量的数据复制,不像矢量的情况,只需要复制数据当size()>capacity()
.
相关文章:
- 使用 Win32 中的 HBITMAP 绘制一个二维数组,C++
- 在C++中将一个二维数组复制到其他未知大小的二维数组
- 是一个二维数组的名称,它在C++中的第一个元素的地址
- C++2d地图?就像一个二维数组
- 当您有一个二维数组(C++)时调用析构函数的正确方法是什么?
- 从函数返回一个二维数组
- 当我尝试输出一个二维数组时,它输出了错误的数字
- 为什么我可以声明一个二维数组与两个维度大小的变量,但不是新的
- c++函数创建一个二维数组并返回一个指向该二维数组的指针
- 如何返回一个二维数组,其中一个维度是未知的大小
- 我如何在函数中返回一个二维数组
- 创建一个二维数组,其中一个维度在编译时未知
- 如何在c++中发送一个二维数组作为引用,并返回
- 从c++函数返回一个二维数组
- 最好的c++库显示图像从一个二维数组
- 我可以把一个二维数组当作一个连续的一维数组吗?
- 尝试填充一个二维数组,但它仍然是一个一维数组
- 用构造函数和用户输入创建一个二维数组
- 需要传递一个二维数组,但必须动态调整大小
- 在给定一个元素的地址下搜索一个二维数组