This technique can be extended to construct container adaptors bundling a container and an algorithmic part, providing a different view onto the data elements in the container. In contrast to smart iterators, views provide a container interface instead of an iterator interface.
This concept has been developed by Seymour [11] and subsequently been extended and implemented using advanced C++ template features by Powell and Weiser in the View Template Library (VTL) [9,8]. This paper describes the design of the VTL as well as the implementation techniques that have been used to create a highly flexible though easily usable library.
Similar special purpose container adaptors can be found e.g. in the Matrix Template Library [12]. There are container adaptors providing scaled vector and matrix views, sparse vector representations from dense data storage, and strided vector views.