C++ / Why Iterators Got It All Wrong

Ilya Yaroshenko via Digitalmars-d digitalmars-d at puremagic.com
Thu Sep 7 02:40:40 PDT 2017


On Wednesday, 6 September 2017 at 21:44:01 UTC, jmh530 wrote:
> On Wednesday, 6 September 2017 at 20:24:05 UTC, Enamex wrote:
> Similarly, a[0] has _strides [4, 1] for universal, [4] for 
> canonical, and [] for contiguous. Mir is written in such a way 
> that a[0] the same regardless of the SliceKind. For the most 
> part, this means that it isn't really obvious that there is a 
> difference between them. It matters in some underlying 
> functions, but I haven't needed to do much other than sometimes 
> convert a contiguous slice to universal (though it's not always 
> clear to me why, I just do it).

For example, lets takes `transposed` function. It does not 
transpose the date. Instead, it swap dimensions.
Assume you have a canonical matrix with _lengths = [3, 4]. So its 
strides are [4]. Now we want to swap dimensions, but to do it we 
need to swap both lengths and strides. So first we need to 
convert a slice to universal, so it will have both strides we 
want to swap: [4, 1]. Transposed slice will have _lengths = [4, 
3] and _strides = [1, 4].

Best Regards,
Ilya



More information about the Digitalmars-d mailing list