Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <chrono>
- #include <functional>
- #include <vector>
- #include <random>
- namespace {
- constexpr size_t sz = 1e8;
- constexpr long long MOD = 1e9;
- } // namespace
- template <class Foo, class... Args> std::time_t get_duration(Foo func, Args&... args) {
- auto start = std::chrono::high_resolution_clock::now();
- func(args...);
- auto stop = std::chrono::high_resolution_clock::now();
- return std::chrono::duration_cast<std::chrono::milliseconds>(stop - start).count();
- }
- void with_RBF(std::vector<long long> const& vec) {
- long long sum = 0;
- for (const long long& elem : vec) {
- sum = (sum + elem) % MOD;
- }
- }
- void with_operator(std::vector<long long> const& vec) {
- long long sum = 0;
- for (size_t i = 0; i < sz; ++i) {
- sum = (sum + vec[i]) % MOD;
- }
- }
- void with_at(std::vector<long long> const& vec) {
- long long sum = 0;
- for (size_t i = 0; i < sz; ++i) {
- sum = (sum + vec.at(i)) % MOD;
- }
- }
- int main() {
- std::vector<long long> vec(sz);
- std::random_device rd;
- std::mt19937 gen(rd());
- std::uniform_int_distribution<long long> uidis(0);
- for (long long& elem : vec) elem = uidis(gen);
- std::time_t rbf_time = get_duration(with_RBF, vec);
- std::time_t operator_time = get_duration(with_operator, vec);
- std::time_t at_time = get_duration(with_at, vec);
- // AMD A6-6310 4 cores 1800 MHz, 4 gb DDR3
- std::cout << "rbf_time == " << rbf_time << " ms\n"; // 2748 ms
- std::cout << "operator_time == " << operator_time << " ms\n"; // 1900 ms
- std::cout << "at_time == " << at_time << " ms\n"; // 2842 ms
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement