By doing that, you are going against the design principles of STL.
Maybe you can consider doing something like:
template <class F> void Iterate(const T &container, F func, bool forward)
std::for_each(container.begin(), container.end(), func);
std::for_each(container.rbegin(), container.rend(), func);
And when you have to iterate you can do something like:
Iterate(userList, someFunction, someCheck());
If you are using a recent compiler, you might even use lambda instead of function objects...
By using a simple function like this one, you can simplify calling code if you have to select direction a lot of time on a whole container.
Depending on what is similar and whjat varies, you might adapt the code so that common logic is inside the iterate function. Or it everything varies a lot, then you might simply uses for_each directly.
You might also look at boost range: http://www.boost.org/doc/libs/1_53_0/libs/range/doc/html/index.html
]. I haven't uses them but it might be something that might help you or maybe give you some idea.