segundos - calculando el tiempo de ejecución en c++
poner tiempo en c++ (7)
Con C ++ 11 para medir el tiempo de ejecución de un fragmento de código, podemos usar la función now ():
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;
Si desea imprimir la diferencia de tiempo entre el inicio y el final en el código anterior, puede utilizar:
cout << chrono::duration <double, milli> (diff).count() << " ms" << endl;
Si prefiere usar nanosegundos, usará:
cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;
El valor de la variable diff también se puede truncar a un valor entero, por ejemplo, si desea que el resultado se exprese como:
diff_sec = chrono::duration_cast<chrono::nanoseconds>(diff);
cout << diff_sec.count() << endl;
Para más información haz click here
He escrito un programa en c ++, quiero saber cómo calcular el tiempo de ejecución necesario para no exceder el límite de tiempo.
#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;
}
¡Este es mi programa y quiero que esté dentro del límite de tiempo de 3 segundos! cómo hacerlo ? Sí, lo siento, me refiero a tiempo de ejecución!
Esto se parece al algoritmo de Dijstra. En cualquier caso, el tiempo que se tarda en ejecutarse dependerá de N. Si tarda más de 3 segundos, no hay forma de verlo acelerándolo, ya que es necesario hacer todos los cálculos que está haciendo.
Dependiendo del problema que intenta resolver, podría haber un algoritmo más rápido.
He utilizado la técnica mencionada anteriormente, pero encontré que el tiempo indicado en el Código: Bloques IDE fue más o menos similar al resultado obtenido (puede ser que difiera en unos pocos segundos).
Nota: la pregunta originalmente era sobre el tiempo de compilación, pero más tarde resultó que el OP realmente significaba tiempo de ejecución. Pero tal vez esta respuesta todavía sea útil para alguien.
Para Visual Studio: vaya a Tools / Options / Projects and Solutions / VC++ Project Settings
y establezca Build Timing
opción Build Timing
en '' yes
''. Después de eso, el tiempo de cada compilación se mostrará en la ventana de resultados.
Si tiene instalado Cygwin, desde su shell bash, ejecute su ejecutable, diga MyProgram
, usando la utilidad de time
, así:
/usr/bin/time ./MyProgram
Esto informará cuánto tiempo tomó la ejecución de su programa: la salida se vería como la siguiente:
real 0m0.792s
user 0m0.046s
sys 0m0.218s
También puede modificar manualmente su programa C para instrumentarlo utilizando la función de biblioteca clock()
, de esta manera:
#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;
}
Todos los tiempos de ejecución aparecen como 0 o 0.001. Eso podría ser correcto, pero ¿es posible que incluso sean 0 segundos?
VISIÓN GENERAL
He escrito un simple truco semántico para esto utilizando la respuesta de @AshutoshMehra
. ¡Tu código parece realmente legible de esta manera!
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
USO
speedtest__("Block Speed: ")
{
// The code goes here
}
SALIDA
Block Speed: 0.127000000s