2013-05-14 65 views
1

我是新来的提升(也为stackoverflow),并希望使用多阵列的向量。我已经做了这样的说法:增强std的多元阵列::矢量

typedef boost::multi_array<std::vector<Vector3_t>, 2> array_type; 
array_type* mImage; 
int mResolution = 1000; 
mImage = new array_type (boost::extents[mResolution][mResolution]); 
//works 
mImage[0][0].origin()->push_back(Vector3_t()); 
//Error: abort() 
mImage[1][1].origin()->push_back(Vector3_t()); 
//Error: abort() 
mImage[500][440].origin()->push_back(Vector3_t()); 

在互联网上我只能找到使用int,逗乐等多阵列的例子。是否有可能在一个mutliarray中使用std :: vector?我知道我可以使用3D多阵列,但我更喜欢载体作为elemet。

回答

2

Boost.MultiArray支持std::vector元素。通常,Boost.MultiArray将在编译时执行概念检查。因此,如果代码用完整类型编译,那么它应该被支持。

随着mImage[0][0].origin()

  • mImage[0][0]返回到std::vector<Vector3_t>的参考。
  • origin()不是std::vector<Vector3_t>的成员函数,从而导致错误。

origin()是多数组的成员函数,它返回第一个元素的存储地址。在阵列未被重新索引为正索引的情况下,对于所有索引(即mImage.origin() == &mImage[0][0]),这相当于0


这里是整数的向量的向量的一个多阵列的简要和完整的例子。

#include <iostream> 
#include <vector> 

#include <boost/foreach.hpp> 
#include <boost/range/counting_range.hpp> 
#include <boost/multi_array.hpp> 

int main() 
{ 
    typedef std::vector<int> vector3_type; 
    typedef boost::multi_array<std::vector<vector3_type>, 2> array_type; 
    array_type array(boost::extents[5][5]); 

    // Insert vector into multi-array. 
    array[0][0].push_back(vector3_type()); 

    // Insert range of [100,105) into the first vector at [0][0] 
    BOOST_FOREACH(const int& i, boost::counting_range(100, 105)) 
    array[0][0].front().push_back(i); 

    // Print all integers at [0][0][0] 
    BOOST_FOREACH(const int& i, array[0][0][0]) 
    std::cout << i << std::endl; 
} 

和运行产生如下预期输出:

100 
101 
102 
103 
104