Информация об изменениях

Сообщение Re[3]: замеры) от 26.07.2023 13:40

Изменено 26.07.2023 13:44 McQwerty

Re[3]: замеры)
Здравствуйте, Sm0ke, Вы писали:

S>Замерил на годболте через chrono: https://godbolt.org/z/dK4jsoxG3

S>На массиве с 90к элементов

Дополнил тест следующим вариантом (с предварительным resize и последующим erase для v_dest):
    {
        v_dest.clear();
        v_dest. resize (v_src. size ());
        const some_time v_start = std::chrono::system_clock::now();
        my_container::iterator d = v_dest. begin ();
        for (auto i = std::cbegin (v_src), i_end = std::cend (v_src); i != i_end; ++ i)
        {
            * d = (* i) >> 1;
            d += ((* i) ^ 1) & 1;
        }
        v_dest. erase (d, v_dest. end ());
        const some_time v_stop = std::chrono::system_clock::now();
        std::cout
            << "mcq: "
            << std::chrono::duration_cast<std::chrono::microseconds>(v_stop - v_start)
            << '\n'
        ;
    }


Выхлоп для тех-же 90'000 элементов:

for: 322us
mcq: 132us
for: 194us
algo: 191us
algo: 190us
for div: 457us
for div: 402us
algo div: 536us
algo div: 600us

Re[3]: замеры)
Здравствуйте, Sm0ke, Вы писали:

S>Замерил на годболте через chrono: https://godbolt.org/z/dK4jsoxG3

S>На массиве с 90к элементов

Дополнил тест следующим вариантом (с предварительным resize и последующим erase для v_dest):
    {
        v_dest.clear();
        v_dest. resize (v_src. size ());
        const some_time v_start = std::chrono::system_clock::now();
        my_container::iterator d = v_dest. begin ();
        for (auto x : v_src)
        {
            * d = x >> 1;
            d += x & 1 ^ 1;
        }
        v_dest. erase (d, v_dest. end ());
        const some_time v_stop = std::chrono::system_clock::now();
        std::cout
            << "mcq: "
            << std::chrono::duration_cast<std::chrono::microseconds>(v_stop - v_start)
            << '\n'
        ;
    }


Выхлоп для тех-же 90'000 элементов:

Program returned: 0
for: 337us
mcq: 132us
for: 195us
algo: 181us
algo: 192us
for div: 415us
for div: 457us
algo div: 526us
algo div: 600us