/* LatexBeginSetup */ #include #include #include #include // <<-- iota #include #include #include #include //#include // <<-- execution policies using namespace std; using namespace std::chrono_literals; int main(int argc, char* argv[]) { vector v(50); iota(begin(v), end(v), 1); /* LatexEndSetup */ if ( argc < 2 ) return 1; if (argv[1] == "seq"s ) { /* LatexBeginSeq */ for_each(/*execution::seq,*/ begin(v), end(v), [](int i) { cout << setw(i) << 's' << endl; }); /* LatexEndSeq */ } if (argv[1] == "thread"s ) { /* LatexBeginThread */ const auto thread_count{4}; const auto size = v.size(); const auto chunk_size{ size/thread_count }; const auto remainder{ size%thread_count }; vector t; auto b{ begin(v) }; for ( unsigned i{}; i < thread_count; ++i) { auto e{ next(b, chunk_size + (i < remainder)) }; t.emplace_back([](auto start, auto end){ for (auto i{start}; i < end; ++i) cout << setw(*i) << '\\' << endl; }, b, e); b = e; } for ( auto && i : t ) i.join(); /* LatexEndThread */ } if (argv[1] == "par"s ) { /* LatexBeginPar */ for_each(/*execution::par,*/ begin(v), end(v), [](int i) { cout << setw(i) << 'p' << endl; }); /* LatexEndPar */ } return 0; }