De la tabla de MultiView associated types:
referencia Este es el tipo de referencia del valor contenido. Si NumDims == 1, entonces este es el elemento &. De lo contrario, este es el mismo tipo que el subarreglo de plantilla :: tipo.
plantilla array_view :: type Este es el tipo de vista con dimensiones Dims. Lo devuelve el operador de llamadas. Modela MultiArray.
por lo que son diferentes tipos, para empezar. En este contexto, las vistas representan una especie de subcolección de un MultiArray. Implementan el concepto MultiArray, pero los elementos que contienen son en realidad elementos de algún otro MultiArray. Las vistas le permiten definir un nuevo index en los elementos de un MultiArray. Por ejemplo, podría definir una vista que invierta el índice, de modo que el primer elemento de la vista sea el último elemento del MultiArray. Desde el documentation:
Una vista le permite tratar un subconjunto de los elementos subyacentes en un multiarray como si se tratara de un multiarray separada. Como una vista se refiere a los mismos elementos subyacentes, los cambios realizados en los elementos de una vista se reflejarán en el MultiArray original.
MultiArrays se definen recursivamente; un MultiArray de dimensión n> 1 se puede considerar como una matriz de MultiArrays de dimensión n -1, que son subconjuntos. La diferencia clave entre un subcampo y una vista es que puede dividir un MultiArray en vistas de dimensiones inferiores a lo largo de cualquier eje, incluido el eje principal, pero los subcampos no se pueden dividir a lo largo del eje principal.
data_t d3(boost::extents[4][5][6]);
data_2d_view_t d2_view = d3[boost::indices[range(0,4,2)][1][range(0,6,3)]];
data_2d_subarray_t d2_sub = d3[1];
// the following, and anything like it, won't work
data_2d_subarray_t d2_sub_b = d3[range(0,4,2)][0];
No creo que haya ninguna diferencia de rendimiento importante, aunque esto depende del tipo de índice que use al crear una vista. Las vistas pueden ser un poco menos performantes, pero no en un gran sentido O.
¡Gracias por la respuesta! ¡Eso es exactamente lo que estaba buscando! Aunque basado en mi experiencia previa http://stackoverflow.com/questions/446866/boostmulti-array-performance-question/4220976#4220976, creo que, en general, los submatrices son mucho más eficaces que las vistas (en una "k" en el lateral del gran sentido de O ") – rodrigob