Boost logo

Boost :

Subject: [boost] [multi_array] Slices, views and sub_arrays
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2008-10-10 06:12:57


Hi All

I'm still plugging away at trying to make use of multi_array, but I
seem to be having a few problems! I suspect my understanding
of the basic paradigm is flawed.

I'm bit confused about views and slices. If I start with a rectangular,
2 dimensional grid, take a view of the whole grid, and then use a
single subscript to index into that view, then I expected the result
to be a view of one less dimension then the original view. However,
it seems to be a "sub_array".

#include "boost/multi_array.hpp"

struct Cell { int i; };

int main( )
{
  typedef boost :: multi_array_types :: index_range range;

  boost :: multi_array< Cell, 2 > grid( boost :: extents[ 9 ][ 9 ] );
  boost :: multi_array< Cell, 2 > :: const_array_view< 2 > :: type
const_grid_view =
    grid[ boost :: indices[ range( ) ][ range( ) ] ];
  boost :: multi_array< Cell, 2 > :: const_array_view< 1 > :: type
const_row_view =
    const_grid_view[ 5 ];
  return 0;
}

The error message from the last assignment is this

sample.cpp: In function `int main()':
sample.cpp:13: error: conversion from
`boost::detail::multi_array::const_sub_array<Cell, 1u, const Cell*>' to
non-scalar
 type `boost::detail::multi_array::const_multi_array_view<Cell, 1u, const
Cell*>' requested

which seems to confirm I've got all my consts and dimensions correct.

So, why is this wrong?

Also, does the return type of sub_array, rather than array_view, mean that
the contents
of the relevant cells have been copied?

Thanks

- Rob.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk