2017-03-17 219 views
1

我試圖製作一個表格(一個9乘11的數組),它存儲了幾個排序函數所花費的時間量。將chrono :: duration轉換爲字符串或C字符串

我想我想要表是一個字符串。我目前無法解決如何將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 
}` 
+0

你不想'elapsed_seconds.count()'?並btw; 'std :: string' doesn'有一個構造函數來完成你想要的轉換。 –

回答

4

你需要流轉換成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()「逃避」,然後添加單位(如果需要)。

2

您可以使用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秒

- 在微秒:

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

結果:

535971μs