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()」にはグローバル変数を上書きするチックとトックが含まれている可能性があるため、2番目の方法の方が適しています。

于 2012-11-21T02:14:58.400 に答える