因此,这是我第一次尝试进行性能评估,并且在尝试将其用于课程之前,已经跟随一些在线资源来测试较小版本的代码。不幸的是,我无法打印出完成该功能所花费的时间,而且我不确定自己是否做对了。
#include <string>
#include <iostream>
#include <unordered_map>
#include <chrono>
using namespace std;
class Timer {
public:
Timer() {
startTimept = std::chrono::high_resolution_clock::now();
}
~Timer() {
Timer Stop();
}
void Stop() {
auto endTimept = std::chrono::high_resolution_clock::now();
auto start = std::chrono::time_point_cast<std::chrono::microseconds>(startTimept).time_since_epoch().count();
auto end = std::chrono::time_point_cast<std::chrono::microseconds>(endTimept).time_since_epoch().count();
auto duration = end - start;
double ms = duration * 0.001;
std::cout << duration << "us (" << ms << "ms)";
}
private:
std::chrono::time_point<std::chrono::high_resolution_clock> startTimept;
};
int main()
{
std::unordered_map<std::string, std::string>::iterator found, start, nFound;
//ADDS PAIRS OF SENTENCE INTO A MAP
std::unordered_map<std::string, std::string> sortMap =
{ { "these", "pairs" }, { "the", "correct" }, { "pairs", "makes" }, { "correct", "sentence" }, { "makes", "the" } };
std::unordered_map<std::string, std::string> swapMap =
{ { "pairs","these" }, {"correct", "the"}, { "makes", "pairs" }, {"sentence", "correct" }, {"the", "makes"} };
//CREATES CONTAINER TO STORE COMPLETE SENTENCE
std::list<std::string> resultSeq;
start = sortMap.begin();
//ADD STARTING WORDS INTO THE LIST
resultSeq.push_back(start->first);
resultSeq.push_back(start->second);
//TEMP POINTER TO SOUGHT WORD
found = sortMap.find(start->second);
//THIS IS THE FUNCTION I AM TRYING TO TEST
{
Timer timer();
for (auto it = sortMap.begin(); it != sortMap.end(); ++it) {
if (it == found) {
resultSeq.push_back(it->second);
found = sortMap.find(it->second);
it = sortMap.begin();
}
}
}
for (std::list<std::string>::iterator hard = resultSeq.begin(); hard != resultSeq.end(); ++hard)
{
std::cout << (*hard) << std::endl;
}
__debugbreak;
}
[如果有人可以发现我在做什么错,或提供任何链接来帮助进行绩效评估,那将非常有帮助!
您应使用std::steady_clock
测量时差。 std::steady_clock
可以是任何东西,不需要单调。 std::system_clock
也是如此。
high_resolution_clock在整个不同的标准库实现,及其使用应为避免。它通常只是std :: chrono :: steady_clock的别名,或者std :: chrono :: system_clock,但取决于库是哪一个或配置。当它是system_clock时,不是单调的(例如,时间可以倒退)。例如,对于gcc的libstdc ++是system_clock,对于MSVC是stable_clock,对于clang的libc ++这取决于配置。
此外,要封装时间测量,可以利用C ++的RAII机制:
std::system_clock
如果是出于快速调试目的,我的个人方法是使用std::high_resolution_clock
。由于它比较罗word,我建议为其创建包装函数。无论如何,这只是返回自1970年以来的时间(以毫秒为单位)(不确定)。然后,您只需在函数前加一个,然后在函数后加一个,std::high_resolution_clock
差,即可获得函数执行所需的毫秒数。