Я хочу добиться чего-то вроде псевдокода ниже:
string foo; // or vector<int> foo;
auto itr = bar? foo.begin() : foo.rbegin();
auto end = bar? foo.end() : foo.rend();
for ( ; itr != end; ++itr) {
// SomeAction ...
}
То есть я хочу, чтобы itr
был прямым или обратным итератором, в зависимости от некоторой bar
условий, для сканирования в прямом или обратном направлении.
Очевидно, такой код не будет работать, так как прямой и обратный итератор имеет разный тип.
Обратите внимание, что я не хочу разбиваться на два //SomeAction
, так как код, подобный //SomeAction
будет дублирован.
Как я могу это сделать? Ответы с использованием С++ 11 и/или ранее являются предпочтительными.
Также, пожалуйста, уточните, если строка и вектор имеют разные решения.