Ausführungszeit in C ++ Berechnungs
-
22-08-2019 - |
Frage
ich ein c ++ Programm geschrieben haben, möchte ich wissen, wie man die Zeit für die Ausführung genommen berechnen, so werde ich nicht die Frist nicht überschreiten.
#include<iostream>
using namespace std;
int main ()
{
int st[10000],d[10000],p[10000],n,k,km,r,t,ym[10000];
k=0;
km=0;
r=0;
scanf("%d",&t);
for(int y=0;y<t;y++)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
cin>>st[i] >>d[i] >>p[i];
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if((d[i]+st[i])<=st[j])
{
k=p[i]+p[j];
}
if(k>km)
km=k;
}
if(km>r)
r=km;
}
ym[y]=r;
}
for( int i=0;i<t;i++)
{
cout<<ym[i]<<endl;
}
//system("pause");
return 0;
}
Das ist mein Programm, und ich will es frist 3 sec sein !! wie es geht ? ja sorry ich meinte Ausführungszeit !!
Lösung
Wenn Sie Cygwin installiert haben, von ihm Bash-Shell ist, führen Sie die ausführbare Datei, sagen MyProgram
, mit dem time
Dienstprogramm, etwa so:
/usr/bin/time ./MyProgram
Dies wird berichten, wie lange die Ausführung Ihres Programms nahm - die Ausgabe in etwa wie folgt aussehen:
real 0m0.792s
user 0m0.046s
sys 0m0.218s
Sie können auch manuell Ihr C-Programm Instrument ändern sie die clock()
Library-Funktion verwenden, etwa so:
#include <time.h>
int main(void) {
clock_t tStart = clock();
/* Do your stuff here */
printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
return 0;
}
Andere Tipps
Mit C ++ 11 zum Messen der Ausführungszeit eines Stück Code, können wir das jetzt () Funktion:
auto start = chrono::steady_clock::now();
// Insert the code that will be timed
auto end = chrono::steady_clock::now();
// Store the time difference between start and end
auto diff = end - start;
Wenn Sie die Zeitdifferenz zwischen Anfang und Ende in dem obigen Code drucken möchten, können Sie verwenden:
cout << chrono::duration <double, milli> (diff).count() << " ms" << endl;
Wenn Sie es vorziehen ns zu verwenden, werden Sie verwenden:
cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;
Der Wert der diff Variable kann auch auf einen ganzzahligen Wert abgeschnitten werden, zum Beispiel, wenn Sie das Ergebnis wollen wie folgt ausgedrückt:
diff_sec = chrono::duration_cast<chrono::nanoseconds>(diff);
cout << diff_sec.count() << endl;
Für weitere Informationen klicken Sie auf hier
Übersicht
Ich habe eine einfache semantische Hack für diese Verwendung @AshutoshMehra
response geschrieben. Sie Code sieht auf diese Weise wirklich lesbar!
MACRO
#include <time.h>
#ifndef SYSOUT_F
#define SYSOUT_F(f, ...) _RPT1( 0, f, __VA_ARGS__ ) // For Visual studio
#endif
#ifndef speedtest__
#define speedtest__(data) for (long blockTime = NULL; (blockTime == NULL ? (blockTime = clock()) != NULL : false); SYSOUT_F(data "%.9fs", (double) (clock() - blockTime) / CLOCKS_PER_SEC))
#endif
VERWENDUNG
speedtest__("Block Speed: ")
{
// The code goes here
}
OUTPUT
Block Speed: 0.127000000s
Hinweis: war die Frage, die ursprünglich über der Kompilierung, aber später stellte sich heraus, dass die OP wirklich Ausführungszeit bedeutete. Aber vielleicht wird noch diese Antwort für jemanden nützlich sein.
Für Visual Studio: nach Tools / Options / Projects and Solutions / VC++ Project Settings
und Build Timing
Option auf 'yes
' gesetzt. Danach wird die Zeit von jedem Build wird im Ausgabefenster angezeigt werden.
Das sieht aus wie Dijstra-Algorithmus. In jedem Fall wurde die Zeit laufen an N. abhängen Wenn es länger als 3 Sekunden es dauert ist nicht so, wie ich es beschleunigen sehen können, da alle Berechnungen, dass es notwendig ist zu tun zu tun.
Je nachdem, was Problem, das Sie versuchten, lösen könnte es ein schnellerer Algorithmus sein.
ich verwendet habe, die Technik, die oben genannten, noch fand ich, dass die gegebene Zeit in dem Code: Blöcke IDE war mehr oder weniger ähnlich das Ergebnis obtained- (kann es durch kleines Mikro unterscheiden Sekunden) ..