Но есть ли функции std, которые выполняют аналогичные функции в одной строке?
Нет, в стандартной библиотеке нет алгоритма для этого (по крайней мере, ничего, что не требовало быписать бесполезный шаблон).Как уже упоминалось, цикл является наиболее читаемым и наименее запутанным способом сделать «что-то» n раз.
При этом, если вы возьмете это за упражнение для получения более краткого синтаксиса, вы можете написатьthis:
#include <iostream>
struct my_counter {
int stop;
struct iterator {
int count;
iterator& operator++() { ++count; return *this; }
int operator*() { return count;}
bool operator!=(const iterator& other) { return count != other.count; }
};
iterator begin() { return {0}; }
iterator end() { return {stop};}
};
void print() { std::cout << "x"; }
int main() {
for (auto x : my_counter{5}) print();
}
Однако я бы настоятельно рекомендовал не использовать что-то подобное.Все знают, как работает цикл и что он делает.При использовании для циклов for вы можете мгновенно прочитать цикл for, в то время как все остальное необычно, удивительно и запутанно, если, конечно, не существует стандартного алгоритма (хотя я сомневаюсь, что алгоритм для этого конкретного случая будет полезен),Зачем изобретать велосипед, если можно использовать петлю?