何事にも七面倒くさいC++ですが、STLライブラリにadjacent_differenceというアルゴリズムが用意されています。
これは、例えば繰り返しタイムスタンプを取得し、そのタイムスタンプの間隔を出したいときにぴったり適合します。
id:torutk:20121019で、Windowsの高精度タイマーQueryPerformanceCounterを連続実行し、その間隔から処理時間を算出しましたが、これはadjacent_differenceにぴったりの処理です。
次は、64bit整数(long long型)のカウンタ値を20回計測し、ある回と次の回とのカウンタ値の差を算出する想定で単純化したコード例です。
#include <vector> #include <algorithm> #include <numeric> #include <iostream> void adjacent_difference_sample() { long long a[10] = {1, 2, 4, 7, 11, 16, 22, 29, 37, 46}; std::vector<long long> laps(10); laps.assign(a, a + 10); std::vector<long long> diffs(laps.size()); std::adjacent_difference(std::begin(laps), std::end(laps), std::begin(diffs)); std::for_each(std::begin(diffs), std::end(diffs), [](long long diff) { std::wcout << diff << std::endl; }); }
10個の数値を持つvector lapsがあり、そのlapsの要素の隣同士の値の差を新たなvecotor diffsに生成しています。
これを実行すると、
1 1 2 3 4 5 6 7 8 9
となります。diffsの最初の要素は、lapsの先頭の値となります。