2013-05-14 1 views
1

Я новичок в Boost (а также в stackoverflow) и хочу использовать многоадресный перенос векторов. Я сделал это таким образом:Boost Multiarray of std :: vector

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()); 

В интернете я могу только найти примеры multiarray, которые используют INT, doule и так далее. Можно ли использовать std :: vector в mutliarray? Я знаю, что могу использовать 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() является функцией-членом многоа массива, которая возвращает адрес хранилища первого элемента. В случае, когда массив не был переиндексирован в положительный индекс, это эквивалентно 0 для всех индексов (то есть mImage.origin() == &mImage[0][0]).


Вот краткий и полный пример с несколькими массивами вектора вектора ints.

#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

 Смежные вопросы

  • Нет связанных вопросов^_^