C++ 'da yeni ve kütüphanesi hakkında pek bir şey bilmiyorum. Ben milisaniye şimdiki zaman elde etmek için hangi farklı sıralama algoritmaları, zaman analizi yapmak gerekir. Bunu yapmanın bir yolu var mı?Geçerli saati milisaniye cinsinden nasıl alabilirim?
cevap
Yalnızca std::chrono'u kullanın. kez "1000 yıldızlı baskı" görevi feryat genel örnek:
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>
int main()
{
using namespace std::chrono;
high_resolution_clock::time_point t1 = high_resolution_clock::now();
std::cout << "printing out 1000 stars...\n";
for (int i=0; i<1000; ++i) std::cout << "*";
std::cout << std::endl;
high_resolution_clock::time_point t2 = high_resolution_clock::now();
duration<double, std::milli> time_span = t2 - t1;
std::cout << "It took me " << time_span.count() << " milliseconds.";
std::cout << std::endl;
return 0;
}
yerine yıldızlı baskı, oradaki sıralama algoritması yerleştirecektir ve zaman bunu ölçmek.
, ör bazı kıyaslama yapmak niyetinde ise, derleyici optimizasyon bayrakları etkinleştirmek unutmayın g++ için -O3
gerekir. Why emplace_back is faster than push_back?
Ps: senin derleyici sonra benim Time Measurements (C++) diğer yöntemlerle içine bakmak olabilir, c++11 desteklemiyorsa Bu ciddi, öyle yapmadım zaman bana ne olduğunu kontrol edin.
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>
void quickSort(int a[], int first, int last);
int pivot(int a[], int first, int last);
void swap(int& a, int& b);
void swapNoTemp(int& a, int& b);
using namespace std;
using namespace std::chrono;
int main()
{
int test[] = { 7, -13, 1, 3, 10, 5, 2, 4 };
int N = sizeof(test)/sizeof(int);
cout << "Size of test array :" << N << endl;
high_resolution_clock::time_point t1 = high_resolution_clock::now();
// I want to measure quicksort
quickSort(test, 0, N-1);
high_resolution_clock::time_point t2 = high_resolution_clock::now();
duration<double> time_span = t2 - t1;
std::cout << "It took me " << time_span.count() << " seconds.";
std::cout << std::endl;
return 0;
}
ve çıkış şimdi:
spesifik (oyuncak) örneği kullanarak benim Quicksort (C++) olurdu
Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall -std=c++11 -O3 main.cpp
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
Size of test array :8
It took me 3.58e-07 seconds.
Bu kadar basit. Mutlu kıyaslama! =)
DÜZENLEME:
high_resolution_clock::now()
fonksiyonu olan bir süre için zaman göreceli olarak döner? std::chrono itibaren
:
: std içineZaman
sonraki tren geçer kişinin doğum günü, bugünün şafak veya zaman gibi zaman içinde belirli bir noktada yapılan bir başvuru, işaret ediyor. Bu kitaplığında, time_point sınıf şablonunun nesneleri, epoch (aynı saat kullanılarak tüm time_point nesnelerinin ortak olduğu zaman zamanında sabit bir noktadır) kullanarak bir süreyi kullanarak bunu ile ifade eder. bir çıkışı bu epoch and time_point example, kontrol edebilir
time_point tp is: Thu Jan 01 01:00:01 1970
Çözüm için teşekkürler gsamaras. –
İlk satır kodunuzu, herhangi bir açık döküm olmaksızın çift milisaniye olarak atayarak basitleştirebilirsiniz: 'duration
@HowardHinnant Yorumunuz ve videonuzda havalı ipuçları! Teşekkür ederim. Cevabımı güncelledim, şimdi beğeneceğinizi umuyoruz. =) – gsamaras
göz :: chorno – DanielCollier
algoritmaları sıralama analizi için, milisaniye yeterince düşük çözünürlük ve "şimdiki zaman" değil mi' olmayabilir t gerçekten neye ihtiyacın var. Bir görevi yerine getirmek için göreceli bir zaman istersiniz. std :: chrono :: high_resolution_clock' muhtemelen istediğiniz şeydir. – Chad
Teşekkürler gsamaras için çözüm, sadece küçük şüphe, yorumlarda yukarıda birisi olarak göreceli bir zaman olduğunu belirtti, java şu anki saat 1sr Ocak 1970 den hesaplanır, bu yüzden high_resolution_clock :: now() işlevi zamana göre döndürür hangi zaman? –