최근에 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