C++ 时间测量类被字符串输入减慢
我试图为时间度量创建一个简单的类,其中strat()将开始度量,end()将结束度量并得出结果。到目前为止,我已经:C++ 时间测量类被字符串输入减慢,c++,string,C++,String,我试图为时间度量创建一个简单的类,其中strat()将开始度量,end()将结束度量并得出结果。到目前为止,我已经: #include <sys/time.h> #include <string> #include <iostream> using namespace std; class Time { public: Time() {strTmp.clear();} void start(string str) { st
#include <sys/time.h>
#include <string>
#include <iostream>
using namespace std;
class Time {
public:
Time() {strTmp.clear();}
void start(string str) {
strTmp=str;
gettimeofday(&tim, NULL);
timeTmp = tim.tv_sec+(tim.tv_usec/1000000.0);
}
void end() {
gettimeofday(&tim, NULL);
cout << strTmp << " time: " << timeTmp - tim.tv_sec+(tim.tv_usec/1000000.0) << "s" << endl;
strTmp.clear();
}
private:
double timeTmp;
string strTmp;
timeval tim;
};
int main()
{
Time t;
t.start("test");
t.end();
return 0;
}
#包括
#包括
#包括
使用名称空间std;
上课时间{
公众:
时间(){strTmp.clear();}
无效开始(字符串str){
strTmp=str;
gettimeofday(&tim,NULL);
timeTmp=tim.tv_sec+(tim.tv_usec/1000000.0);
}
void end(){
gettimeofday(&tim,NULL);
cout一个简单的字符串不应该给测试增加那么多时间(1秒?)
在任何情况下,请按常量引用而不是按值传递字符串。按值传递时会产生不必要的副本:
void start(const string& str) {
另一个选项是风格——这个字符串除了让输出看起来“花哨”之外还有什么用途?为什么不干脆扔掉它?另外,为什么你的类要做cout
?如果目标是封装Time
,那么就不需要cout——让Time
类的客户机来处理I/O。看起来你应该把计时器标记字符串传递给构造函数,而不是start函数。Also、 当计时器处于活动运行状态时,您不需要执行此计算。
timeTmp=tim.tv\u sec+(tim.tv\u usec/1000000.0);。请等到注册完调用end
的时间后,再执行类似这样的单位转换操作。您需要记住运算符优先级:
cout << strTmp << " time: " << timeTmp - tim.tv_sec+(tim.tv_usec/1000000.0) << "s" << endl;
cout常量引用没有改变延迟。我仍然得到1.11038s和-9.53674e-07s,没有看到我上面添加的注释。有些地方不对劲。甚至你的“快”时间看起来是假的。它是一个负数??我不小心从结束时间中减去了开始时间。这就是为什么我有一个负数。当我把它改为结束时间减去开始时间后,1瑞典克朗的延迟也消失了。这对我来说真的很奇怪,在我的理解中,切换位置只会导致负号的改变。然而问题现在消失了。好的,这是一个“小数字+大数字=大数字,没有变化”事情就是这样,这就是为什么会有1秒的结果。还有一些事情在发生。1秒对你来说不是很奇怪吗?我看不出传递一个简单的string对象需要1秒的时间。你是从输出语句中获取时间,还是真的在看时钟并观察它所花费的时间?如果是前者,请为1编写一个循环如果你说的是真的,循环100次应该需要一分钟。