私は最近stackoverflowに投稿したプログラムの効率を見出そうとしています。C++コードのランタイム効率を見つける方法
How to efficiently delete elements from a vector given an another vector
私はchrono
オブジェクトを使用している他の回答に私のコードの効率を比較します。
実行時の効率を確認する正しい方法はありますか?
もしそうでない場合は、例を挙げてそれを行う方法をお勧めします。
#include <iostream>
#include <vector>
#include <algorithm>
#include <chrono>
#include <ctime>
using namespace std;
void remove_elements(vector<int>& vDestination, const vector<int>& vSource)
{
if(!vDestination.empty() && !vSource.empty())
{
for(auto i: vSource) {
vDestination.erase(std::remove(vDestination.begin(), vDestination.end(), i), vDestination.end());
}
}
}
int main() {
vector<int> v1={1,2,3};
vector<int> v2={4,5,6};
vector<int> v3={1,2,3,4,5,6,7,8,9};
std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
remove_elements(v3,v1);
remove_elements(v3,v2);
std::chrono::steady_clock::time_point end= std::chrono::steady_clock::now();
std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count() <<std::endl;
for(auto i:v3)
cout << i << endl;
return 0;
}
出力
Time difference = 1472
7
8
9
'chrono'コールがいかににこれを読みます再配列され、測定値が無効になります。 http://stackoverflow.com/q/37786547/3747990 – Niall
私は、同じコードを複数回実行した方が良い結果を得て、平均を得ると思います。 – Neijwiert
正しい測定のためには、1)ウォームアップ(測定前に多くの同様の操作を行う)、2)多くの呼び出しの平均結果を見つける、3)コンパイラの超最適化を避ける(もし、計算の結果を使用して、それはちょうどそれをスキップすることができます)。 – Ilya