サイトさんに感謝
引用 https://qiita.com/tyanmahou/items/8497d6e815ebf7ea90c6
引用 ChatGPT

動的配列ライブラリ作っているので、new配列とstd::vectorと比較したくなった。
で、L回した平均を出すものを作って、さらにまとめて出力できる。


#pragma once
#include<string>
#include<iostream>
#include<chrono>
#include<functional>
#include<sstream>
#include<iomanip> // ★ 追加:setwなどに必要



//シングルベンチ
//使い方:{clPTime pt(strName);時間のかかる処理}
class clPTime
{
public:
    clPTime(const std::string& strName) :
        m_strName(strName), m_start(std::chrono::system_clock::now())
    {}
    ~clPTime()
    {
        const auto end = std::chrono::system_clock::now();
        const auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - m_start).count();

        // ★ 表示フォーマット調整
        std::cout << std::setw(30) << std::left << m_strName << ": "
            << std::setw(5) << std::right << elapsed << " ms" << std::endl;
    }
private:
    std::string m_strName;
    int m_iLoop;
    std::chrono::system_clock::time_point m_start;
};

//マルチアベレージベンチ
//使い方:
//int iTestNum = 10;

//strExplanation="説明";

//clPAveTime::fcOverRallData_Clear(strExplanation);
//clPAveTime pt(strName, iTestNum, [&]() { fc関数A(); });
//clPAveTime pt(strName, iTestNum, [&]() { fc関数B(); });
//clPAveTime pt(strName, iTestNum, [&]() { fc関数Z(); });
//clPAveTime::fcOverRallData_Show();

class clPAveTime {
public:
    clPAveTime(const std::string& strName, int iLoop, const std::function<void()>& fcFunc)
    {
        m_strName = strName;
        s_iLoop = iLoop;
        long long total = 0;

        std::cout << std::setw(30) << std::left << m_strName << ": ";  // ★ 左詰めで名前整列

        for (int i = 0; i < iLoop; ++i) {
            auto start = std::chrono::high_resolution_clock::now();
            fcFunc();  // 関数を実行
            auto end = std::chrono::high_resolution_clock::now();
            const auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
            total += elapsed;

            // ★ 1〜2回目、最後の2回だけ詳細表示、それ以外はドット
            if (i < 2 || i >= iLoop - 2) {
                std::cout << std::setw(3) << std::right << (i + 1) << ":"
                    << std::setw(4) << elapsed << "ms, ";
            }
            else {
                std::cout << ".";
            }
        }
        //std::cout << std::endl;

        std::ostringstream ossTmpNow;
        std::ostringstream ossTmpOA;
        // ★ 集計結果も整列表示
        ossTmpNow
            << " 平均 " << std::setw(5) << (total / iLoop)
            << " ms" << std::endl;
        ossTmpOA << std::setw(30) << std::left << m_strName
            << " 平均 " << std::setw(5) << (total / iLoop)
            << " ms" << std::endl;

        s_ossOverRallData << ossTmpOA.str();
        std::cout << ossTmpNow.str();
    }
    static void fcOverRallData_Clear(std::string strExplanation);
    static void fcOverRallData_Show();

    static std::ostringstream s_ossOverRallData;
    static int s_iLoop;
    static std::string s_strExplanation;
private:
    std::string m_strName;
    int m_iLoop;
};
std::ostringstream clPAveTime::s_ossOverRallData;
int clPAveTime::s_iLoop = 2;
std::string  clPAveTime::s_strExplanation="";

void clPAveTime::fcOverRallData_Clear(std::string strExplanation) {
    s_strExplanation = strExplanation;
    s_ossOverRallData.str("");
    s_ossOverRallData.clear();
}

void clPAveTime::fcOverRallData_Show() {
    std::cout <<
        "\n"
        "=====================================================\n"
        "=========== 全体集計 " << std::setw(5) << clPAveTime::s_iLoop << "回の平均時間  "
        "===========\n"
        "=====================================================\n";
        std::cout << s_strExplanation << "\n";
        std::cout << s_ossOverRallData.str();
}



Arr N*N:N=5000
mtd:Specialスワップ          :   1:  97ms,   2:  98ms, ......  9:  98ms,  10:  98ms,  平均    97 ms
mtd:stdスワップ              :   1:  76ms,   2:  80ms, ......  9:  78ms,  10:  79ms,  平均    77 ms
mtd:forスワップ              :   1: 118ms,   2: 124ms, ......  9: 111ms,  10: 110ms,  平均   113 ms
mtd:forアンロールスワップ    :   1: 112ms,   2: 113ms, ......  9: 111ms,  10: 109ms,  平均   113 ms
new:stdスワップ              :   1: 139ms,   2: 138ms, ......  9: 133ms,  10: 130ms,  平均   135 ms
new:forスワップ              :   1: 156ms,   2: 154ms, ......  9: 158ms,  10: 153ms,  平均   155 ms
vec:stdスワップ              :   1: 134ms,   2: 135ms, ......  9: 137ms,  10: 126ms,  平均   132 ms
vec:forスワップ              :   1: 152ms,   2: 158ms, ......  9: 155ms,  10: 141ms,  平均   149 ms
mtd:Specialコピー            :   1: 105ms,   2: 103ms, ......  9: 104ms,  10: 104ms,  平均   104 ms
mtd:stdコピー                :   1:  87ms,   2:  86ms, ......  9:  88ms,  10:  89ms,  平均    87 ms
mtd:forコピー                :   1: 111ms,   2: 107ms, ......  9: 110ms,  10: 108ms,  平均   109 ms
mtd:forアンロール コピー    :   1: 110ms,   2: 108ms, ......  9: 110ms,  10: 109ms,  平均   108 ms
new:stdコピー                :   1: 131ms,   2: 136ms, ......  9: 135ms,  10: 124ms,  平均   132 ms
new:forコピー                :   1: 148ms,   2: 158ms, ......  9: 148ms,  10: 148ms,  平均   150 ms
vec:stdコピー                :   1: 142ms,   2: 151ms, ......  9: 137ms,  10: 137ms,  平均   142 ms
vec:forコピー                :   1: 161ms,   2: 141ms, ......  9: 155ms,  10: 146ms,  平均   149 ms
mtd:インクリメント           :   1:  43ms,   2:  42ms, ......  9:  43ms,  10:  43ms,  平均    42 ms
mtd:ポインタ++回し         :   1:  44ms,   2:  42ms, ......  9:  42ms,  10:  43ms,  平均    42 ms
new:インクリメント           :   1:  71ms,   2:  66ms, ......  9:  67ms,  10:  51ms,  平均    58 ms
vec:インクリメント           :   1:  51ms,   2:  51ms, ......  9:  50ms,  10:  55ms,  平均    53 ms
Arr N*N:N=1000
mtd:行列掛け算               :   1: 570ms,   2: 571ms, ......  9: 570ms,  10: 574ms,  平均   571 ms
new:行列掛け算               :   1: 330ms,   2: 324ms, ......  9: 324ms,  10: 327ms,  平均   326 ms
vec:行列掛け算               :   1: 328ms,   2: 325ms, ......  9: 330ms,  10: 329ms,  平均   328 ms


=====================================================
=========== 全体集計    10回の平均時間  ===========
=====================================================
シングルスレッド・N*Nの行列 N=5000 掛け算は1000 cpu:i9-12900K
mtd:Specialスワップ           平均 97    ms
mtd:stdスワップ               平均 77    ms
mtd:forスワップ               平均 113   ms
mtd:forアンロールスワップ     平均 113   ms
new:stdスワップ               平均 135   ms
new:forスワップ               平均 155   ms
vec:stdスワップ               平均 132   ms
vec:forスワップ               平均 149   ms
mtd:Specialコピー             平均 104   ms
mtd:stdコピー                 平均 87    ms
mtd:forコピー                 平均 109   ms
mtd:forアンロール コピー     平均 108   ms
new:stdコピー                 平均 132   ms
new:forコピー                 平均 150   ms
vec:stdコピー                 平均 142   ms
vec:forコピー                 平均 149   ms
mtd:インクリメント            平均 42    ms
mtd:ポインタ++回し          平均 42    ms
new:インクリメント            平均 58    ms
vec:インクリメント            平均 53    ms
mtd:行列掛け算                平均 571   ms
new:行列掛け算                平均 326   ms
vec:行列掛け算                平均 328   ms
Hello World!

mtd、列方向おせー。改良改良

プロファイラーなるものをつかえるようになりたい