All in all, you really don't want to go through containers! The same algorithm that works for std::array<T, N> also works for other data structures, for example, std::vector<T> or std::deque<T> . The C ++ approach in this case is to pass to the iterator and [slightly] configure the algorithm:
template<typename BidrectionalIterator> void insertionSort(BidirectionalIterator begin, BidirectionalIterator end) { for (BidirectionalIterator it(begin); it != end; ++it) { for (BidirectionalIterator insertion(it), tmp(insertion); begin != insertion && *--tmp > *insertion; --insertion) { std::swap(*tmp, *insertion); } } }
(I did not check that the algorithm works, but you get the idea).
Note that the algorithm intentionally sorts the sequence in place! If you want to create a sorted copy, create a copy and sort: in this way, you have the choice to do it in place or not, and not be forced to use an approach that may require excessive memory (OK, when the sequence is large, you, of course , do not want to use this algorithm, but this is a separate issue).
Dietmar KΓΌhl
source share