в матлабе:
tic
do something ...
toc
моя попытка иметь эту функциональность:
#define tic double tic_t = clock();
#define toc std::cout << (clock() - tic_t)/CLOCKS_PER_SEC \
<< " seconds" << std::endl;
Теперь я могу сделать это в C ++:
tic
doSomething();
toc
Проблема в том, что я не могу вызывать его несколько раз внутри функции, потому что tic_t будет определен несколько раз.
Я хочу сделать что-то вроде этого:
tic
doSomething1();
toc
tic
doSomething2();
toc
Я бы реализовал это как стек. Затем вы можете набирать номер, вызывать его несколько раз, делать все, что вы хотите, и он не сломается, пока вы звоните toc()
после каждого tic()
, В качестве бонуса вам не нужно прибегать к использованию макросов:
#include <iostream>
#include <stack>
#include <ctime>
std::stack<clock_t> tictoc_stack;
void tic() {
tictoc_stack.push(clock());
}
void toc() {
std::cout << "Time elapsed: "<< ((double)(clock() - tictoc_stack.top())) / CLOCKS_PER_SEC
<< std::endl;
tictoc_stack.pop();
}
int main(int argc, char *argv[]) {
tic();
doSomething();
toc();
return 0;
}
Либо поставить double tic_t;
как глобальный, и #define tic tic_t = clock();
или добавить #define tictoc_init double tic_t
что вы используете в верхней части каждого метода (и изменить tic
как указано выше)
Второй способ лучше, так как «doSomething ()» может содержать метки и метки, которые перезаписывают вашу глобальную переменную.