REPマクロとは
競技プログラミングで使われるらしい?
#define REP(i,n) for (int i=0;i<(n);i++)
こんなマクロを定義しておいて
REP(i, 5) {
REP(j, 10) {
std::cout << i << ", " << j << std::endl;
}
}
みたいに使うっぽい
はぇ~って感じだ(小並感)
クラス化してみる
(何となく試してみただけで実用性は)ないです
class repeat {
public:
// コンストラクタでループする
repeat(size_t count, std::function<void()> lambda) {
size_t index = get().size();
// カウンタを追加
get().push_back(0);
// count 回 lambda を実行
for (; get()[index] < count; get()[index]++) {
lambda();
}
// カウンタを削除
get().pop_back();
}
// ループ回数を取得する
static size_t count(size_t index) {
return (index >= get().size()) ? 0 : get()[index];
}
// get()[index] = count(index)
static std::vector<size_t> &get() {
static std::vector<size_t> count;
return count;
}
};
このクラスを使って
repeat(5, [] {
repeat(10, [] {
std::cout << repeat::count(0) << ", " << repeat::count(1) << std::endl;
});
});
みたいに使う
結論
短く書かなくていいならふつうに for した方がいい(震え声)