简单计时器在很多情况下我们希望能够获得算法的运行时间。无论是在项目中还是算法学习中都会有这个需求。比如我们需要比较冒泡排序和快速排序的速度差距。常规操作就是在算法的前后记录各种时间信息但这样写一定程度上会让代码变得很凌乱不够优雅。定时器比较算法运行时间此时又可以使用 RAII 的技术来编写一个定时器。我们分别在构造函数和析构函数中都记录一个时间点。并在析构中计算两个时间点的差值这就是 Timer 对象所占用的生存周期也就是我们所测试算法的时间了。#include ctime #include iostream #include vector class Timer { private: clock_t start 0; public: Timer() { start clock(); } ~Timer() { clock_t end clock(); std::cout (end - start) std::endl; } }; void bubbleSort(std::vectorint arr) { int n arr.size(); for (int i 0; i n; i) { for (int j 0; j n - 1 - i; j) { if (arr[j] arr[j 1]) { std::swap(arr[j], arr[j 1]); } } } } void quickSort(std::vectorint arr, const int start, const int end) { if (start end) { return; } int left start; int right end; int pivotIdx rand() % (right - left 1) left; std::swap(arr[pivotIdx], arr[left]); int pivot arr[left]; while (left right) { while (left right arr[right] pivot) { right--; } arr[left] arr[right]; while (left right arr[left] pivot) { left; } arr[right] arr[left]; } arr[left] pivot; pivotIdx left; quickSort(arr, start, pivotIdx - 1); quickSort(arr, pivotIdx 1, end); } int main() { std::vectorint arr; for (int i 0; i 50000; i 1) { arr.push_back(rand() % 1000); } // 测试冒泡排序时间 { auto nums arr; std::cout bubbleSort use ; Timer timer; bubbleSort(nums); } // 测试快速排序时间 { auto nums arr; std::cout quickSort use ; Timer timer; quickSort(nums, 0, nums.size() - 1); } return 0; }输出效果为bubbleSort use 6888 quickSort use 7