2017-03-04 82 views
0

所以我實現了我自己的array數據結構。我實現的操作,如:ostream double precision

  1. 在指定索引
  2. 添加元素刪除元素-------- -------- ||
  3. 察看值存在於數組中

現在我必須測量這些操作的時間。我有這樣的代碼:(IM使用Visual Studio C++)

LARGE_INTEGER clock, start, end, result; 
QueryPerformanceFrequency(&clock); 
int sizes[] = { 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000 }; 
long double seconds; 
long double summedSeconds = 0; 
std::ofstream myfile; 
myfile.open("results.txt"); 
std::setprecision(10); //I want the precision to be 1ns + 1 bit for rounding 
for (auto&x : sizes) 
{ 
    for (int i = 0 ; i < 100; i++) 
    {     
     myArray.generate(x); // this generates myArray of size x 
     QueryPerformanceCounter(&start); 
     myArray.insert(1, x/2); //this will insert value of 1 into an index = half of array 
     QueryPerformanceCounter(&end); 
     result.QuadPart = end.QuadPart - start.QuadPart; 
     seconds = (long double)result.QuadPart/(long double)clock.QuadPart; 
     summedSeconds += seconds; // this is summed up for 100 example data     
    } 
    std::cout << summedSeconds/100 << '\n'; 

    myfile << std::fixed << std::setw(6) << x << "\t" << summedSeconds/100 << '\n'; 
} 
myfile.close(); 

現在,這給了我在results.txt是這樣的:

100 0.000008 
    200 0.000013 
    500 0.000031 
    1000 0.000052 
    2000 0.000115 
    5000 0.000287 
10000 0.000568 
20000 0.001134 
50000 0.002017 
100000 0.003756 

因此,基於元素的數量,時間測量。但講師要求~1ns精度,所以這還不夠(現在只有6位,我想至少要9-10)。當我還沒有將它保存到文件中時,我使用std::fixedstd::cout.precision(10)來記錄該信息。它按我的意思工作。我怎樣才能使它保存到文件?

P.S我很遺憾不能使用boost::

+1

無論誰告訴你'precision()'不適用於'std :: ofstream',你正在使用,顯然是錯誤的。 –

+0

但後來它是'std :: cout.precision(10)',現在應該用什麼替換'cout'? @編輯,好吧,你是對的。 'myfile.precision()'做了這個工作 – Frynio

回答

1

您與cout使用相同的機械手可以fstreams使用沒有任何問題。嘗試使用打印到標準輸出時使用的相同代碼。

+0

沒錯,謝謝! – Frynio