我正在编写一系列排序算法,并计算每种算法的执行时间。
#include <iostream>
#include <vector>
#include <chrono>
#include <utility>
#include "sort.h"
template<class T>
void timeTaken(void (*f)(std::vector<T>& nums))
{
auto t1 = std::chrono::high_resolution_clock::now();
f();
auto t2 = std::chrono::high_resolution_clock::now();
double duration = std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count();
std::cout << duration << " microseconds";
// return duration;
}
template<typename T>
void display(std::vector<T>& nums)
{
for(int x : nums) std::cout << x << " ";
std::cout << "\n\t ---------------------------------- \n";
}
void displayTesting()
{
std::cout << "testing .... \n";
}
int main()
{
std::vector<int> A {4,5,2,7,1,10,15};
std::cout << "ORIGNAL ARRAY: ";
display(A);
bubbleSort(A);
timeTaken(&display); //ERROR: No matching function for call "time Taken"
std::cout << "BUBBLE SORT: ";
display(A);
std::cout << "\n";
return 0;
}
当我尝试将displayTesting()作为timeTaken()的参数时,它工作正常(当然,我将after(* f)删除了该参数)。所以我认为问题基本上是我如何将某个函数的参数带入timeTaken()函数中。
display
是模板;T
无法在中推导模板参数timeTaken(&display);
。
您可以通过指定实例化static_cast
,
timeTaken(static_cast<void (*)(std::vector<int>&)>(&display));
要么
timeTaken(&display<int>);
或显式指定模板参数。
timeTaken<int>(&display);
其他问题:
bubbleSort
。f();
正在尝试f
不带参数的调用,但应该接受std::vector<T>&
。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句