container algorithms can be called directly on lvalues or piped with rvalues