天道酬勤,学无止境

我使用 difftime 的 c 函数有时会返回 65535(My c-function using difftime returns 65535 sometimes)

问题

我有一个函数,它使用 difftime 来检测自通信心跳停止以来的时间(以秒为单位)。 此函数可以每 50 毫秒运行一次。 该函数似乎可以正常工作,但它偶尔会返回 65535。我可以将执行减少到每秒一次,因为 difftime 的返回仅以秒为单位。 但是不知道能不能解决问题。 这是因为我没有正确地将 difftime 返回值从 double 转换回 uint16_t 吗?

该程序在 ubuntu 64 位机器上运行。

请帮忙。 谢谢。

uint16_t commlost(uint16_t heartbeat_read_cur)
{  
    time_t current_time;  
    static time_t previous_time;  
    static uint16_t commlost_secs_cur = 0;  
    static uint16_t commlost_secs_prev = 0;  
    static uint16_t heartbeat_read_prev = 0;  
    static bool first_time = TRUE;
    if (first_time)
    {
        previous_time = time(NULL);
        first_time = FALSE;
    }

    time(&current_time);

    commlost_secs_prev = commlost_secs_cur;

    if(heartbeat_read_prev == heartbeat_read_cur)
    {

        commlost_secs_cur += difftime(current_time, previous_time);
    }
    else
    {
        heartbeat_read_prev = heartbeat_read_cur;
        commlost_secs_cur = 0;
    }

    previous_time = current_time;

    return (commlost_secs_cur);
}
回答1

difftime()time_t支持比整数秒更高的分辨率的系统上使用。 虽然允许,但我从未遇到过这样的系统 - 我不认为存在这样的系统。 特别是在 POSIX 系统上, time_t以整数秒为单位测量,而difftime()等效于其参数的算术减法,因此实际上您最好只使用:

commlost_secs_cur += current_time - previous_time ;

也就是说,您的实现有些过于复杂,而不是累积自上次调用以来的时间,这可能小于时钟分辨率,您可以简单地标记上次观察到的心跳并从那时起返回时间:

int commlost(uint16_t heartbeat_read_cur)
{  
    time_t current_time = time(0) ;  
    static time_t heartbeat_timestamp = 0 ; 
    static uint16_t heartbeat_read_prev  ;

    // If first time, or heartbeat changed...
    if( heartbeat_timestamp == 0 || heartbeat_read_prev != heartbeat_read_cur)
    {
        // ... timestamp heartbeat
        heartbeat_timestamp = time(0) ;

        // ... keep last heartbeat
        heartbeat_read_prev = heartbeat_read_cur ;
    }

    // Return seconds since last heartbeat timestamp
    return current_time - heartbeat_timestamp ;
}

我不确定你为什么要使用uint16_t ; 除非与某些特定协议或文件格式兼容,否则几乎没有优势。

回答2

在查询时间之前,请阅读 time(7) 手册页(并再次阅读)。

我建议将clock_gettime(2) 与例如CLOCK_MONOTONICCLOCK_REALTIME使用,并且最好使用double进行时间计算(因为struct timespec通常大于任何整数类型)。

不要将uint16_t用于此类时间计算。

尝试使用

inline double double_gettime (clockid_t cid) {
  struct timespec ts = {0,0};
  clock_gettime(cid, &ts);
  return (double)ts.tv_sec + 1.0e-9*ts.tv_nsec;
}

您可能希望通过测试clock_gettime是否失败并在失败时提供NAN来使该函数更clock_gettime 这留给读者作为练习。 对于CLOCK_REALTIME等,您还可以测量进程开始时的某个时间与当前时间之间的差异(即计算差异的struct timespec并将该差异转换为double

然后事情像

double tstart = double_gettime(CLOCK_REALTIME);
some_long_computation();
double tend = double_gettime(CLOCK_REALTIME);
printf ("needed %f seconds to compute\n", tend-tstart);

另见时钟(3)

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • My c-function using difftime returns 65535 sometimes
    I have a function that uses difftime to detect the time in seconds since the communication heartbeat has stopped. This function could run as fast as every 50 milliseconds. The function seems to work except once in a while it returns 65535. I can reduce the execution to once a second since the return of difftime is only in seconds. But I don't know if it will fix the problem. Is it the problem because I am not properly casting the difftime return back to uint16_t from double? This program runs in an ubuntu 64bit machine. Please help. Thanks. uint16_t commlost(uint16_t heartbeat_read_cur) { time
  • difftime和'-'有什么区别?(what is the difference between difftime and '-'?)
    问题 我有2个类型为time_t的变量-varEnd和varStart。 现在,为了了解它们之间的区别,我可以做 varEnd - varStart; 或者 difftime(varEnd, varStart); 两者都返回秒数。 请让我知道,他们有什么区别吗? 还是哪个是推荐的? 回答1 该语言指定time_t是一种能够表示时间的算术类型。 它不需要以任何特定方式表示时间。 如果time_t将时间表示为某个时刻以来的秒数,则-运算符将正确计算两个time_t值之间的秒数差。 如果不是(例如,粒度为一毫秒,或者将time_t的位分成代表年,月,日等的组),则-运算符可能会产生无意义的结果。 另一方面,difftime()函数“知道” time_t如何表示时间,并使用该信息以秒为单位计算差异。 在大多数实现中,简单的减法和difftime()恰好可以做相同的事情-但只有difftime()可以保证在所有实现上都能正常工作。 另一个区别: difftime()返回浮点类型double ,而time_t值上的"-"产生time_t类型的结果。 在大多数情况下,结果将隐式转换为您为其分配的值的类型,但是如果time_t恰好是无符号整数类型,则从较早的时间减去较晚的时间将产生非常大的值,而不是负值。 我见过的每个系统都将time_t实现为32位或64位有符号整数类型,但是允许使用无符号类型
  • 在C中实现时间延迟(implement time delay in c)
    问题 我不知道该怎么用单词来搜索..所以我没有运气找到任何东西..:S 我需要在C中实现时间延迟。 例如,我想做一些事情,然后等待说一分钟,然后继续做事情。 那有道理吗? 谁能帮我吗? 回答1 在标准C(C99)中,您可以使用time()来执行此操作,例如: #include <time.h> : void waitFor (unsigned int secs) { unsigned int retTime = time(0) + secs; // Get finishing time. while (time(0) < retTime); // Loop until it arrives. } 顺便说一下,这假设time()返回1秒的分辨率值。 我认为这不是标准规定的要求,因此您可能需要对其进行调整。 为了明确起见,这是我所知道的使用ISO C99做到这一点的唯一方法(而且这个问题仅标有“ C”字样,这通常意味着可移植的解决方案是可取的,尽管当然,特定于供应商的解决方案可能仍会给出)。 无论如何,如果您使用的平台提供了更有效的方式,请使用它。 正如一些评论所指出的那样,在CPU使用率和电池寿命方面,像这样的紧密循环可能存在一些特定的问题。 任何体面的时间片OS都可以降低连续使用其整个时间片的任务的动态优先级,但是电池电量可能会带来更多问题。
  • Android:加速度计误检(Android: Accelerometer false detection)
    问题 我有一个代码片段来检测加速度计的运动。 它有时会通过正确检测轻微移动来工作,但有时当我让设备闲置时它也会检测到移动。 Android 上的内置加速度计检测是否有任何问题? 我使用 HTC G-1 设备。 我的代码片段如下。 如何解决它以便我可以检测到小型设备移动但在设备空闲时检测不到任何内容? private static final int SHAKE_THRESHOLD = 50; public void onSensorChanged(int sensor, float[] values) { if (sensor == SensorManager.SENSOR_ACCELEROMETER) { long curTime = System.currentTimeMillis(); // only allow one update every 100ms. if ((curTime - lastUpdate) > 100) { long diffTime = (curTime - lastUpdate); lastUpdate = curTime; x = values[SensorManager.DATA_X]; y = values[SensorManager.DATA_Y]; z = values[SensorManager.DATA_Z]; float speed
  • 如何在C语言中测量时间?(How do I measure time in C?)
    问题 我想找出某个代码块执行了多长时间(大约)。 像这样的东西: startStopwatch(); // do some calculations stopStopwatch(); printf("%lf", timeMesuredInSeconds); 如何? 回答1 您可以在time.h中使用clock方法 例子: clock_t start = clock(); /*Do something*/ clock_t end = clock(); float seconds = (float)(end - start) / CLOCKS_PER_SEC; 回答2 您可以使用time.h库,特别是time和difftime函数: /* difftime example */ #include <stdio.h> #include <time.h> int main () { time_t start,end; double dif; time (&start); // Do some calculation. time (&end); dif = difftime (end,start); printf ("Your calculations took %.2lf seconds to run.\n", dif ); return 0; } (示例摘自上面链接的difftime网页
  • R从半标准字符串中提取时间分量(R extract time components from semi-standard strings)
    问题 设置 我有一列持续时间作为字符串存储在数据帧中。 我想将它们转换为适当的时间对象,可能是POSIXlt。 使用此方法可以轻松解析大多数字符串: > data <- data.frame(time.string = c( + "1 d 2 h 3 m 4 s", + "10 d 20 h 30 m 40 s", + "--")) > data$time.span <- strptime(data$time.string, "%j d %H h %M m %S s") > data$time.span [1] "2012-01-01 02:03:04" "2012-01-10 20:30:40" NA 丢失的持续时间被编码为"--"并且需要将其转换为NA这种情况已经发生,但应该保留。 挑战在于字符串会丢弃零值元素。 因此,期望值2012-01-01 02:00:14将是字符串"1 d 2 h 14 s" 。 但是,此字符串使用简单的解析器解析为NA : > data2 <- data.frame(time.string = c( + "1 d 2 h 14 s", + "10 d 20 h 30 m 40 s", + "--")) > data2$time.span <- strptime(data2$time.string, "%j d %H h %M m %S s") >
  • 使用POSIXct算法在data.table中显示的单位错误(Wrong units displayed in data.table with POSIXct arithmetic)
    问题 当在data.table(v1.9.2)中计算持续时间时,可以使用POSIXct算法打印错误的单位。 似乎选择了第一个单位。 require("data.table") dt <- data.table(id=c(1,1,2,2), event=rep(c("start", "end"), times=2), time=c(as.POSIXct(c("2014-01-31 06:05:30", "2014-01-31 06:45:30", "2014-01-31 08:10:00", "2014-01-31 09:30:00")))) dt$time[2] - dt$time[1] # in minutes dt$time[4] - dt$time[3] # in hours dt[ , max(time) - min(time), by=id] # wrong units printed for id 2 我意识到其中一种是获得预期行为的正确方法,但是我想报告这种行为。 不知道这是否真的是data.table问题或POSIXct问题。 dt[ , difftime(max(time), min(time), units="mins"), by=id] # both in mins dt[ , difftime(max(time), min(time), units=
  • 获取以年为单位的日期差(浮点数)(Get date difference in years (floating point))
    问题 我想根据参考日期和测量日期与源半衰期(以年为单位)之间的差异来更正源活动。 说我有 ref_date <- as.Date('06/01/08',format='%d/%m/%y') 以及我的data.frame具有相同日期格式的列,例如, today <- as.Date(Sys.Date(), format='%d/%m/%y') 我可以使用lubridate软件包找到这些日期之间的年数 year(today)-year(ref_date) [1] 5 today - ref_date有没有我可以用来获取浮点答案的函数today - ref_date例如today - ref_date = 5.2y? 回答1 是的,当然,请使用difftime()和一个数字: R> as.numeric(difftime(as.Date("2003-04-05"), as.Date("2001-01-01"), + unit="weeks"))/52.25 [1] 2.2529 R> 请注意,我们确实必须切换到以52.25缩放的星期,因为在计算年数方面存在一些含糊之处-2月29日大约每4年出现一次,但并不是每100年出现一次。 因此,您必须定义它。 difftime()处理长达数周的所有时间单位。 出于非恒定“分子”的相同原因,无法完成数月。 回答2
  • Linux上的时区转换C API,有人吗?(Time zone conversion C API on Linux, anyone?)
    问题 我正在寻找一种我认为非常简单的方法-给定特定时区中的本地Unix时间(指定为字符串,例如“ America / New_York”,请注意,这不是我的本地时间),获取相应的时间值在格林尼治标准时间。 即,类似的东西 time_t get_gmt_time(time_t local_time, const char* time_zone); 听起来很简单,但我能找到的最接近的是timegm手册页中的以下代码段: #include <time.h> #include <stdlib.h> time_t my_timegm(struct tm *tm) { time_t ret; char *tz; tz = getenv("TZ"); setenv("TZ", "", 1); tzset(); ret = mktime(tm); if (tz) setenv("TZ", tz, 1); else unsetenv("TZ"); tzset(); return ret; } 有比这种非线程安全的憎恶更好的方法,对吗? 正确的?? 回答1 想要在此处添加更多细节。 如果您尝试以下操作: #include <stdio.h> #include <time.h> /* defines 'extern long timezone' */ int main(int argc, char *
  • C语言程序的运行时间(使用函数库time.h)
    difftime函数 C 库函数 double difftime(time_t time1, time_t time2) 返回 time1 和 time2 之间相差的毫秒数 (time1 - time2)。这两个时间是在日历时间中指定的,表示了自纪元 Epoch(协调世界时 UTC:1970-01-01 00:00:00)起经过的时间。返回值: 该函数返回以双精度浮点型 double 值表示的两个时间之间相差的秒数 (time1 - time2)。 实例代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int main() { clock_t start_t, end_t; double total_t; start_t = clock(); // dosomething for (int i = 0; i < 1000; i++) { printf("%d ", i); } end_t = clock(); total_t = difftime(end_t, start_t) / CLOCKS_PER_SEC; // CLOCKS_PER_SEC = 1000 printf("diff: CPU占用的总时间:%f\n", total_t); return 0; } [注]
  • time_t是什么原始数据类型? [复制](What primitive data type is time_t? [duplicate])
    问题 这个问题已经在这里有了答案: 最终typedef的time_t是什么? (10个回答) 3年前关闭。 我不知道time_t的数据类型。 它是浮点双精度数还是其他? 因为如果要显示它,我需要与printf对应的标签。 我可以从那里处理其余部分以显示time_t但我需要知道与之相对应的数据类型。 回答1 不幸的是,它不是完全可移植的。 它通常是整数,但可以是任何“整数或实数浮点类型”。 回答2 它是特定于平台的。 但是您可以将其强制转换为已知类型。 printf("%lld\n", (long long) time(NULL)); 回答3 您可以使用difftime函数。 它返回两个给定的time_t值之间的差,输出值为double (请参见difftime文档)。 time_t actual_time; double actual_time_sec; actual_time = time(0); actual_time_sec = difftime(actual_time,0); printf("%g",actual_time_sec); 回答4 您总是可以使用诸如mktime之类的东西来创建一个已知时间(午夜,昨晚),并使用difftime来获得两者之间的双精度时差。 对于独立于平台的解决方案,除非您深入研究库的详细信息,否则您将无法做得更好。 根据C规范,time
  • 以小时为单位找出两个日期之间的差异?(Find the difference between two dates in hours?)
    问题 例如,我可以通过查看这两个日期来计算它们的差异,但是在程序中计算它时我不知道。 日期:A 是2014/02/12(y/m/d) 13:26:33 ,B 是2014/02/14(y/m/d) 11:35:06那么小时差是 46。 回答1 我假设您的商店时间为字符串:如"2014/02/12 13:26:33" 要计算时差,您需要使用: double difftime( time_t time_end, time_t time_beg); 函数difftime()计算两个日历时间之间的差异,以秒为单位作为time_t对象( time_end - time_beg )。 如果time_end是指时间点之前time_beg那么结果是否定的。 现在的问题是difftime()不接受字符串。 我们可以分两步将字符串转换为 time.h 中定义的 time_t 结构,正如我在我的回答中所述:如何以“月日期 hh:mm:ss”格式比较两个时间戳: 使用 char *strptime(const char *buf, const char *format, struct tm *tm); 将char*时间字符串转换为 struct tm。 strptime()函数使用format 指定的格式将buf 指向的字符串转换为存储在tm 指向的tm 结构中的值。 要使用它
  • 如何比较格式为“ Month Date hh:mm:ss”的两个时间戳以检查+ ve或-ve值(How to compare two time stamp in format “Month Date hh:mm:ss” to check +ve or -ve value)
    问题 我检查了stackoverflow网站以获取答案,但没有得到,所以我将其发布在这里。 我的问题是: 如何比较格式为"Month Date hh:mm:ss"两个时间戳? 我正在用C和C ++编写程序,时间是可显示的字符串格式。 例子 : time1 = "Mar 21 11:51:20" time2 = "Mar 21 10:20:05" 我想比较time1和tme2,找出time2是否在time1之后,我需要输出true或false ,如下所示: if time2 > time1 then i need output as 1 or 0 or -1 anything 我使用了difftime(time2,time1) ,但是它返回了time1和time2之间的diff时间diff 。 我想检查是否更大。 对于任何帮助,在此先感谢 回答1 首先-使用difftime进行比较: 您可以简单地使用difftime()函数比较时间并返回1或-1 ,如下所示: int comparetime(time_t time1,time_t time2){ return difftime(time1,time2) > 0.0 ? 1 : -1; } SECOND-将字符串转换为时间: 如果您难以将string转换为time_t结构,则可以依次使用两个函数: char * strptime
  • 三、JavaScript的对象
    一、创建对象的三种方式 在 JavaScript 中,现阶段我们可以采用三种方式创建对象(object): 利用字面量创建对象利用 new Object 创建对象利用构造函数创建对象 (一)利用字面量创建对象 对象字面量:就是花括号 { } 里面包含了表达这个具体事物(对象)的属性和方法。{ } 里面采取键值对的形式表示 键:相当于属性名 值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型,函数类型等) <script> //利用对象字面量创建对象{} var obj = {}; //创建一个空的对象 var obj2 = { uname: '张三丰', age: 18, sex: '男', sayHi: function() { console.log('hi~'); } } //(1)里面的属性或者方法我们采取键值对的形式 键 属性名:值 属性值 //(2)多个属性或者方法中间用逗号隔开 //(3)方法冒号后面跟的是一个匿名函数 //使用对象 console.log(obj2.uname); //方式一 console.log(obj2['age']); //方式二 //调用对象的方法 obj2.sayHi(); </script> 对象里面的属性调用:对象.属性名 ,这个小点 . 就理解为“ 的 ” 对象里面属性的另一种调用方式:对象[‘属性名’]
  • 获取星期,月份,季度和年份之间的日期差(Get the difference between dates in terms of weeks, months, quarters, and years)
    问题 我有两个日期let's说, 14.01.2013和26.03.2014 。 我想得到这两个日期之间的区别,分别是星期(?),月份(在示例14中),季度(4)和年份(1)。 您知道获得此信息的最佳方法吗? 回答1 那这个呢: # get difference between dates `"01.12.2013"` and `"31.12.2013"` # weeks difftime(strptime("26.03.2014", format = "%d.%m.%Y"), strptime("14.01.2013", format = "%d.%m.%Y"),units="weeks") Time difference of 62.28571 weeks # months (as.yearmon(strptime("26.03.2014", format = "%d.%m.%Y"))- as.yearmon(strptime("14.01.2013", format = "%d.%m.%Y")))*12 [1] 14 # quarters (as.yearqtr(strptime("26.03.2014", format = "%d.%m.%Y"))- as.yearqtr(strptime("14.01.2013", format = "%d.%m.%Y")))*4 [1]
  • 如何在R中的年,月,日和日期之间双向转换?(How to convert in both directions between year,month,day and dates in R?)
    问题 如何在R中的年,月,日和日期之间转换? 我知道人们可以通过字符串来做到这一点,但是我宁愿避免转换为字符串,部分原因是可能会对性能造成影响吗?部分原因是我担心区域化问题,世界上某些地方使用“年-月-日” ”,有些则使用“年-日-月”。 看起来ISODate提供了year,month,day-> DateTime的方向,尽管它确实首先将数字转换为字符串,所以如果有一种方法不能通过字符串,那么我更喜欢。 我找不到从日期时间到数值相反的东西吗? 我宁愿不需要使用strsplit或类似的东西。 编辑:为了清楚起见,我所拥有的是一个看起来像这样的数据框: year month day hour somevalue 2004 1 1 1 1515353 2004 1 1 2 3513535 .... 我希望能够自由转换为这种格式: time(hour units) somevalue 1 1515353 2 3513535 .... ...并且也可以再次返回。 编辑:清除一些关于“时间”(小时单位)的含义的混淆,最终弄清我所做的是什么,并使用“如何找到R中两个小时之间的日期差”中的信息: 前进方向: lh$time <- as.numeric( difftime(ISOdate(lh$year,lh$month,lh$day,lh$hour), ISOdate(2004,1,1,0)
  • 计算两列之间的时差(Calculating Time Difference between two columns)
    问题 在将因子转换成POSIXCT格式然后应用datetime格式之后,我想计算2 pos1和pos2之间的datetime之差。 但是,当我对某个特定项目执行此操作时,我会在控制台中得到正确的答案,但是当我对整个操作集进行操作时,控制台只会输出数字,而且日期框架也会反映出这些数字,如您所见。 当我尝试区别时如何获得数据框中的小时数? 我正在使用lubridate软件包,有什么功能吗? 这是RStudio中描述数据的示例代码/图片 CR_Date <- data.frame( pos1="2014-07-01 00:00:00", pos2=c("2014-07-01 00:00:00","2014-07-01 10:15:00") ) CR_Date[] <- lapply(CR_Date,as.POSIXct) CR_Date # pos1 pos2 #1 2014-07-01 2014-07-01 00:00:00 #2 2014-07-01 2014-07-01 10:15:00 CR_Date$pos2[2] - CR_Date$pos1[2] #Time difference of 10.25 hours CR_Date$hours <- CR_Date$pos2 - CR_Date$pos1 回答1 首先,这与润滑液无关。 其次
  • C ++中的时差(Time difference in C++)
    问题 有谁知道如何以毫秒为单位计算C ++中的时差? 我使用了difftime,但是它没有我想要测量的精度。 回答1 您必须使用更具体的时间结构之一,即timeval(微秒分辨率)或timespec(纳秒分辨率),但您可以相当容易地手动进行操作: #include <time.h> int diff_ms(timeval t1, timeval t2) { return (((t1.tv_sec - t2.tv_sec) * 1000000) + (t1.tv_usec - t2.tv_usec))/1000; } 如果时间差确实很大(或者如果您具有16位整数),则这显然会带来整数溢出问题,但这可能不是常见情况。 回答2 我知道这是一个老问题,但是C ++ 0x有更新的答案。 有一个名为<chrono>的新标头,其中包含现代实用程序。 使用示例: #include <iostream> #include <thread> #include <chrono> int main() { typedef std::chrono::high_resolution_clock Clock; typedef std::chrono::milliseconds milliseconds; Clock::time_point t0 = Clock::now(); std::this_thread
  • R日期与lubridate(R sequence of dates with lubridate)
    问题 嗨,我正在尝试获取lubridate的日期序列 这行不通 seq(ymd('2012-04-07'),ymd('2013-03-22'),by=week(1)) 基本命令 seq(as.Date('2012-04-7'),as.Date('2013-03-22'),'weeks') 确实可以,但是我想知道是否有一种使用lubridate的优雅方法。 编辑 请忽略:解决了我自己,所以只留给后代。 如有必要,很高兴将其删除。 seq(ymd('2012-04-07'),ymd('2013-03-22'),by='weeks') 绝招 回答1 ymd是用于解析日期字符串并返回POSIXct对象的包装器。 您只需要使用?seq.POSIXt中描述的标准术语(而不是lubridate )来定义星期 seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '1 week') seq(ymd('2012-04-07'),ymd('2013-03-22'), by = 'weeks') 会工作 一如既往 seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '2 week') 您可以将lubridate Period类对象强制为difftime ,但这似乎是不必要的 seq(ymd('2012-04-07'),ymd(
  • C ++向量与数组(时间)(C++ Vector vs Array (Time))
    问题 我在这里有两个程序,它们都在执行完全相同的任务。 他们只是将布尔数组/向量设置为true。 使用vector的程序需要27秒钟才能运行,而包含5倍大数组的程序只需不到1 s的时间。 我想知道为什么会有如此大的差异的确切原因吗? 向量真的效率低吗? 使用矢量程序 #include <iostream> #include <vector> #include <ctime> using namespace std; int main(){ const int size = 2000; time_t start, end; time(&start); vector<bool> v(size); for(int i = 0; i < size; i++){ for(int j = 0; j < size; j++){ v[i] = true; } } time(&end); cout<<difftime(end, start)<<" seconds."<<endl; } 运行时-27秒 使用数组的程序 #include <iostream> #include <ctime> using namespace std; int main(){ const int size = 10000; // 5 times more size time_t start, end; time(