我有一个Boost多数组,它的维数是在运行时根据用户的输入设置的。现在我想通过x,y,z组件迭代该数组。如果这是一个std::vector,我会用途:
x,y,z
for(int i=0;i<v.size();i++){
或者是某种迭代器。如何获得多数组维数的数值?如何迭代多数组?
0lvr5msh1#
您可以使用shape()实现一种不那么复杂的方式:
shape()
#include <iostream> #include <string> #include <boost/multi_array.hpp> int main() { boost::multi_array<std::string, 2> a(boost::extents[3][5]); for(size_t x = 0; x < a.shape()[0]; x++) { for(size_t y = 0; y < a.shape()[1]; y++) { std::ostringstream sstr; sstr << "[" << x << ", " << y << "]"; a[x][y] = sstr.str(); } } for(size_t x = 0; x < a.shape()[0]; x++) { for(size_t y = 0; y < a.shape()[1]; y++) { std::cout << a[x][y] << "\n"; } } return 0; }
(See它在运行on coliru)
gg0vcinb2#
#include "boost/multi_array.hpp" #include <iostream> #include <algorithm> #include <iterator> int main () { typedef boost::multi_array_types::index_range range; typedef boost::multi_array<char, 2> Array2d; Array2d a(boost::extents[8][24]); //to view the two-dimensional array as a one-dimensional one can use multi_array_ref? boost::multi_array_ref<char, 1> a_ref(a.data(), boost::extents[a.num_elements()]); std::fill(a_ref.begin(), a_ref.end(), '-'); //to apply algorithm to one row or column, can use array_view //especially useful for traversing it vertically? //e.g: Array2d::array_view<1>::type views[4] = { a[boost::indices[range()][0]], //left column a[boost::indices[range()][a[0].size() - 1]], //right column a[boost::indices[0][range()]], //top row a[boost::indices[a.size()-1][range()]] //bottom row }; for (unsigned i = 0; i != sizeof(views)/sizeof(views[0]); ++i) { std::fill ( views[i].begin(), views[i].end(), 'X' ); } //output for (unsigned i = 0; i != a.size(); ++i) { std::copy(a[i].begin(), a[i].end(), std::ostream_iterator<char>(std::cout, "")); std::cout << '\n'; } }
来源:http://cboard.cprogramming.com/cplusplus-programming/112584-boost-multiarray.html
2条答案
按热度按时间0lvr5msh1#
您可以使用
shape()
实现一种不那么复杂的方式:(See它在运行on coliru)
gg0vcinb2#
来源:http://cboard.cprogramming.com/cplusplus-programming/112584-boost-multiarray.html