web-dev-qa-db-ja.com

chrono :: durationを文字列またはC文字列に変換する

いくつかの並べ替え関数による関数の所要時間を格納するテーブル(9 x 11の配列)を作成しようとしています。

テーブルを文字列にしたいと思います。現在、chronostringに変換する方法を解決できておらず、オンラインでリソースを見つけることができません。

テーブルの文字列タイピングを放棄する必要がありますか、またはこれらの時間差を文字列に保存する方法はありますか?

for (int i = 0; i<8;i++) // sort 8 different arrays
{ 
    start = chrono::system_clock::now(); 
    //Sort Array Here
    end = chrono::system_clock::now();
    chrono::duration<double> elapsed_seconds = end-start;
    table[1][i] = string(elapsed_seconds)   // error: no matching conversion for functional style cast
}
12
7l-l04

_std::ostringstream_にストリーミングし、そのストリームから文字列を取得する必要があります。

_chrono::duration_をストリーミングするには、その.count()メンバー関数を使用してから、ユニット(nsなどのユニット)を追加できます。

この無料のヘッダーのみのオープンソースライブラリ: https://howardhinnant.github.io/date/chrono_io.html は、自動的にdurationを追加することで、あなたのためのユニット。

例えば:

_#include "chrono_io.h"
#include <iostream>
#include <sstream>

int
main()
{
    using namespace std;
    using namespace date;
    ostringstream out;
    auto t0 = chrono::system_clock::now();
    auto t1 = chrono::system_clock::now();
    out << t1 - t0;
    string s = out.str();
    cout << s << '\n';
}
_

私のために出力してください:

_0µs
_

_"chrono_io.h"_ がなければ、次のようになります。

_    out << chrono::duration<double>(t1 - t0).count() << 's';
_

使用できる_to_string_ファミリもあります。

_    string s = to_string(chrono::duration<double>(t1 - t0).count()) + 's';
_

ただし、_to_string_から直接移動する_chrono::duration_はありません。 .count()で「エスケープ」してから、必要に応じてユニットを追加する必要があります。

8
Howard Hinnant

次のようにchrono::duration_castを使用できます。

#include <iostream>
#include<chrono>
#include <sstream>

using namespace std;

int main()
{
    chrono::time_point<std::chrono::system_clock> start, end;
    start = chrono::system_clock::now();
    //Sort Array Here
    end = chrono::system_clock::now();
    chrono::duration<double> elapsed_seconds = end - start;
    auto x = chrono::duration_cast<chrono::seconds>(elapsed_seconds);

    //to_string
    string result = to_string(x.count());

    cout <<  result;
}

結果:

-秒:

0秒

-µs:

auto x = chrono::duration_cast<chrono::microseconds>(elapsed_seconds);

結果:

535971µs

6
HDJEMAI