c++ - 将 chrono::duration 转换为字符串或 C 字符串

标签 c++ string type-conversion c++-chrono

我正在尝试制作一个表(一个 9 x 11 数组)来存储多个排序函数所花费的时间量。

我想我希望表格是一个字符串。我目前无法解决如何将 chrono 转换为 string 并且无法在线找到任何资源。

我是否需要放弃表的字符串类型,或者有没有办法将这些时间差异存储在一个字符串中?

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
}

最佳答案

您需要流式传输到 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()“逃脱”然后添加单位(如果需要)。


更新

C++20 带来了 "chrono_io.h" 的功能直入<chrono> .因此不再需要免费的开源库。

关于c++ - 将 chrono::duration 转换为字符串或 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42866524/

相关文章:

c++ - 如何为以下程序使用静态或动态转换

android - 在 Cocos2d-x 中比较字符串时出错

r - 如何在R中用相同的字符串替换多个字符串

c++ - 将 uint32 读取为没有溢出的 float ?

C# 解析 SqlDbType 转换

c++ - 在默认初始化程序 gcc 与 clang 中使用 lambda

c++ - 使用 SCH_CRED_FORMAT_CERT_HASH 时,AcquireCredentialsHandle 在内核模式下失败

c++ - 指针 vector 的迭代器

python:将字符串转换为类对象

c++ - 如果 `double` 或 `long double` 适合 `long long`,如何正确检查?