5

在matlab中:

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
4

2 回答 2

18

我会将它实现为堆栈。然后,你可以递归,多次调用它,做任何你想做的事情,它不会中断,只要你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;
}
于 2012-11-21T02:46:10.503 回答
2

要么double tic_t;作为一个全局变量,要么在每个方法的顶部#define tic tic_t = clock();添加一个你使用的(并按上述方式进行更改)#define tictoc_init double tic_ttic

第二种方法更好,因为“doSomething()”可能包含会覆盖全局变量的 tic 和 tocs。

于 2012-11-21T02:14:58.400 回答