Ich bin neu in C++ und ich weiß nicht viel über seine Bibliothek. Ich brauche Zeitanalyse verschiedener Sortieralgorithmen, für die ich die aktuelle Zeit in Millisekunden bekommen muss. Gibt es eine Möglichkeit, das zu tun?Wie bekomme ich die aktuelle Zeit in Millisekunden?
Antwort
Verwenden Sie einfach std::chrono. Das allgemeine Beispiel unten mal die Aufgabe „des Druckens 1000 Sterne“:
#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;
}
Statt die Sterne zu drucken, werden Sie Ihren Sortieralgorithmus gibt Ort und Zeit misst es.
Vergessen Sie nicht, die Optimierungsflags für Ihren Compiler zu aktivieren, wenn Sie ein Benchmarking durchführen möchten, z. Für g++ benötigen Sie -O3
. Die Lage ist ernst, zu überprüfen, was mit mir passiert, wenn ich nicht tun: Why emplace_back is faster than push_back?
Ps: Wenn Ihr Compiler nicht c++11 nicht unterstützt, dann könnte man andere Methoden suchen in meiner Time Measurements (C++).
Ein spezifisches (Spielzeug) Beispiel durch meine Verwendung Quicksort (C++) wäre:
#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;
}
und der Ausgang ist jetzt:
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.
Es ist so einfach. Glückliches Benchmarking! =)
EDIT:
high_resolution_clock::now()
Funktion gibt Zeit relativ zu welchem Zeitpunkt?
Von std::chrono:
Zeitpunkt
Ein Verweis auf einen bestimmten Zeitpunkt, wie der einen Geburtstag, die heutigen Morgendämmerung, oder wann der nächste Zug fährt. In dieser -Bibliothek drücken Objekte der time_point-Klassenvorlage dies durch unter Verwendung einer Dauer relativ zu einer Epoche aus (dies ist ein fester Zeitpunkt , der allen time_point-Objekten gemeinsam ist, die dieselbe Uhr verwenden).
, wo man diese epoch and time_point example überprüfen konnte, welche Ausgänge:
time_point tp is: Thu Jan 01 01:00:01 1970
Danke gsamaras für die Lösung. –
Sie können Ihren ersten Codeblock vereinfachen, indem Sie ihn in einer doppelbasierten Millisekunde ohne explizite Umwandlung zuweisen: 'duration
@HowardHinnant coole Tipps in Ihrem Kommentar und Video! Vielen Dank. Ich habe meine Antwort aktualisiert, hoffe, dass es dir jetzt gefällt. =) – gsamaras
- 1. Wie bekomme ich die aktuelle Datumzeit in Millisekunden in Android
- 2. Wie bekomme ich die aktuelle Zeit in nativem Android-Code?
- 3. Wie bekomme ich die aktuelle Zeit?
- 4. Wie bekomme ich die aktuelle Zeit in Millisekunden von C in Linux?
- 5. Wie bekomme ich die Hardware-Zeit in Millisekunden?
- 6. Wie bekomme ich die aktuelle Zeit in Millisekunden mit Go Sprache?
- 7. Wie bekomme ich die aktuelle Zeit mit der Chiffre
- 8. Wie bekomme ich aktuelle Spielzeit, CMTime in Millisekunden in AVPlayer?
- 9. Wie bekomme ich die aktuelle Zeit in Swift?
- 10. C#: Wie bekomme ich die aktuelle Zeit in eine Zeichenfolge?
- 11. Wie bekomme ich die aktuelle Zeit in Elm?
- 12. Erhalten Sie die aktuelle Zeit in Millisekunden in C?
- 13. wie bekomme ich Datum Zeit einschließlich Millisekunden in VBA
- 14. bekomme die aktuelle Zeit in Sekunden
- 15. Wie bekomme ich die aktuelle UTC 0 Zeit mit D?
- 16. Verwenden des GPS (LocationManager) Wie bekomme ich die aktuelle Zeit?
- 17. Wie bekomme ich die aktuelle Zeit vom Server?
- 18. Wie bekomme ich den Zeitunterschied in Millisekunden
- 19. Nimm Zeit in Millisekunden
- 20. Lokale Zeit mit Millisekunden
- 21. Wie kann ich die Zeit in Millisekunden zweimal in gawk
- 22. Zeit-Picker zu Millisekunden, die falschen Wert in Millisekunden nehmen
- 23. Wie bekomme ich die UTC-Zeit
- 24. Wie bekomme ich Millisekunden Delta in Python?
- 25. Wie bekomme ich die Doppelklick-Zeit in WPF
- 26. eine Zeit in Millisekunden
- 27. Wie erhalten Sie die aktuelle Zeit in Millisekunden (lang), in VB.Net?
- 28. kann nicht aktuelle Zeit
- 29. Wie bekomme ich die aktuelle Tastatursprache?
- 30. In iOS wie bekomme ich die aktuelle Zeit wie System.currentTimeMillis() in Java?
Blick in std :: chorno – DanielCollier
Für die Analyse von Algorithmen Sortier Millisekunden niedrig genug, um die Auflösung und „aktuelle Zeit“ isn kann nicht‘sein t wirklich, was du sowieso brauchst. Sie möchten die relative Zeit für die Ausführung einer Aufgabe. 'std :: chrono :: high_resolution_clock' ist wahrscheinlich, was Sie wollen. – Chad
Danke gsamaras für die Lösung, nur kleine Zweifel, wie jemand oben in den Kommentaren erwähnt, dass die aktuelle Zeit eine relative Zeit ist, in Java wird die aktuelle Zeit von Mitternacht 1sr Jan 1970 berechnet, so high_resolution_clock :: now() -Funktion gibt Zeit relativ zu welche Zeit? –