Вот где например в документации на boost:algorithm::contains указывается, что Range1T должен быть Forward Range? (Для реализации было бы достаточно Single Pass Range, нужно было бы сохранять N-1 прочитанных значений, где N — длина искомого range.)
http://www.boost.org/doc/libs/1_47_0/doc/html/boost/algorithm/contains.html