最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++計(jì)算程序執(zhí)行時(shí)間的幾種方法實(shí)現(xiàn)

 更新時(shí)間:2025年02月16日 11:08:21   作者:擺爛小白敲代碼  
本文主要介紹了C/C++計(jì)算程序執(zhí)行時(shí)間的幾種方法實(shí)現(xiàn),包括使用clock()函數(shù)、使用庫和使用time.h頭文件中的time()函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下

引言

我們在寫算法時(shí)要考慮到算法的執(zhí)行效率,有的題目規(guī)定了時(shí)間限制,我們需要在這個(gè)時(shí)間之內(nèi)去解決問題。如果我們需要比對算法的好壞,就需要輸出這個(gè)程序運(yùn)行了多長時(shí)間。

在C或C++中計(jì)算程序執(zhí)行時(shí)間,可以使用多種方法,下面我介紹幾種比較常見且好用的幾種方法,大家可以選擇適合自己的一種記住就可以了。

方法1:使用 clock() 函數(shù)(C/C++)

在C/C++中,<time.h>庫提供了clock()函數(shù)。這個(gè)方法是博主比較推薦的一個(gè),非常簡便,且易懂,它用于測量程序的CPU時(shí)間。clock() 函數(shù)返回程序從啟動(dòng)到函數(shù)被調(diào)用時(shí)所經(jīng)過的時(shí)鐘周期數(shù)。這個(gè)函數(shù)主要用于測量程序的CPU時(shí)間消耗,而不是實(shí)際的墻鐘時(shí)間(即從墻上的時(shí)鐘測量的時(shí)間)。

函數(shù)原型

clock_t clock(void);
  • clock_t 類型,表示自程序啟動(dòng)以來的時(shí)鐘周期數(shù)。 

使用實(shí)例:

以下是使用clock()函數(shù)計(jì)算遞歸與非遞歸程序執(zhí)行時(shí)間的示例代碼:

#include<iostream>
#include<time.h>
using namespace std;
typedef long long ll;

ll n, sum=1;

ll fun(int dep) {//遞歸函數(shù)
	if (dep == 1) {
		return 1;
	}
	else {
		return 2 * (fun(dep - 1) + 1);
	}
}
void test0() {//非遞歸直接利用數(shù)學(xué)公式推理
	cin >> n;
	for (int i = 0; i < n-1; i++) {
		sum = (sum + 1) * 2;
	}
	cout << sum << endl;
	//printf("%.2lf\n", (double)clock() / CLOCKS_PER_SEC);
}
void test01() {
	cin >> n;
	cout << fun(n) << endl;
	//printf("%.2lf\n", (double)clock() / CLOCKS_PER_SEC);
}
int main() {
	// 開始時(shí)間
    clock_t start = clock();

    // 要執(zhí)行的代碼
    // ...
	test01();
    // 結(jié)束時(shí)間
    clock_t end = clock();

    // 計(jì)算執(zhí)行時(shí)間(以秒為單位)
    double execution_time = (double)(end - start) / CLOCKS_PER_SEC;

    // 輸出執(zhí)行時(shí)間
    printf("程序執(zhí)行時(shí)間:%f 秒\n", execution_time);
	

	return 0;
}

 

第一個(gè)是 遞歸的程序占用CPU的時(shí)間,第二個(gè)是非遞歸的程序占用CPU的時(shí)間。

注意事項(xiàng)

  • CLOCKS_PER_SEC 是 <time.h> 庫中定義的一個(gè)宏,表示每秒的時(shí)鐘周期數(shù)。
  • (end - start) 單位是毫秒, 除以CLOCKS_PER_SEC周期轉(zhuǎn)化為以秒為單位。
  • clock() 函數(shù)返回的是程序占用CPU的時(shí)間 ≠ 程序的實(shí)際運(yùn)行時(shí)間。
  • clock() 函數(shù)返回的是程序占用CPU的時(shí)間,不包括睡眠時(shí)間或其他非CPU時(shí)間。
  • 在多處理器系統(tǒng)上,clock() 函數(shù)的行為可能有所不同,具體取決于操作系統(tǒng)的實(shí)現(xiàn)。
  • clock() 函數(shù)的精度依賴于系統(tǒng),可能每次運(yùn)行程序可能不相同。

clock() 函數(shù)是測量程序性能的一個(gè)簡單工具,但它不適用于需要高精度時(shí)間測量的場景,適用于對比算法時(shí),不需要計(jì)算準(zhǔn)確時(shí)間。對于更高精度的時(shí)間測量,可以考慮使用C++11中的 <chrono> 庫,或者在Unix-like系統(tǒng)中使用 clock_gettime() 函數(shù)。

方法2:使用 <chrono> 庫(C++11及以上)

C++11引入了<chrono>庫,它提供了高精度的時(shí)間測量功能。這個(gè)庫里面有很多函數(shù),都是與時(shí)間有關(guān)的,功能非常強(qiáng)大,下面列舉一個(gè)比較常用的函數(shù)。

函數(shù)實(shí)例:

std::chrono::system_clock::now獲取當(dāng)前系統(tǒng)時(shí)間的時(shí)間點(diǎn)
std::chrono::steady_clock::now獲取當(dāng)前穩(wěn)定時(shí)間的時(shí)間點(diǎn)
std::chrono::high_resolution_clock::now獲取當(dāng)前高分辨率時(shí)間的時(shí)間點(diǎn)
std::chrono::time_point模板類,用于表示時(shí)間點(diǎn)
std::chrono::duration模板類,用于表示時(shí)間間隔
std::chrono::system_clock::to_time_ttime_point轉(zhuǎn)換為std::time_t
std::chrono::system_clock::from_time_tstd::time_t轉(zhuǎn)換為time_point
std::put_time用于將時(shí)間格式化為字符串
std::this_thread::sleep_for使當(dāng)前線程睡眠一段時(shí)間

這個(gè)是實(shí)打?qū)嵉挠?jì)算程執(zhí)行時(shí)間的,其原理類似一個(gè)計(jì)時(shí)器,當(dāng)執(zhí)行到 auto start = std::chrono::high_resolution_clock::now();這個(gè)語句獲取一個(gè)時(shí)間,開始計(jì)時(shí)。auto end = std::chrono::high_resolution_clock::now();這個(gè)語句也是獲取一個(gè)時(shí)間,執(zhí)行完就結(jié)束計(jì)時(shí),最后,使用count()函數(shù)以秒為單位打印出運(yùn)行時(shí)間。

代碼示例:

以下是使用<chrono>庫計(jì)算程序執(zhí)行時(shí)間的示例代碼:

#include <iostream>
#include <chrono>

using namespace std;

int main() {
    // 開始時(shí)間點(diǎn)
    auto start = chrono::high_resolution_clock::now();

    // 要執(zhí)行的代碼
    // ...

    // 結(jié)束時(shí)間點(diǎn)
    auto end = chrono::high_resolution_clock::now();

    // 計(jì)算持續(xù)時(shí)間
    chrono::duration<double, milli> duration = end - start;

    // 輸出執(zhí)行時(shí)間
    cout << "程序執(zhí)行時(shí)間:" << duration.count() << "毫秒" << endl;

    return 0;
}

方法3:使用time.h頭文件中的time()函數(shù)

time.h 是 C 語言標(biāo)準(zhǔn)庫中的一個(gè)頭文件,它提供了多種與時(shí)間相關(guān)的函數(shù)。這個(gè)time函數(shù)是C語言初學(xué)者最熟悉的一個(gè)。其中,time() 函數(shù)用于獲取當(dāng)前的日歷時(shí)間(自1970年1月1日00:00:00 UTC以來的秒數(shù))。

time.h頭文件常用函數(shù):

  • time():

    功能:獲取當(dāng)前時(shí)間。

    原型:time_t time(time_t *tloc);

    返回值:返回當(dāng)前時(shí)間(自1970年1月1日00:00:00 UTC以來的秒數(shù)),如果出錯(cuò)返回-1。

    參數(shù):tloc是一個(gè)可選的指針,如果提供,函數(shù)會(huì)將當(dāng)前時(shí)間存儲(chǔ)在這個(gè)指針指向的位置。

  • ctime():

    • 功能:將 time_t 值轉(zhuǎn)換為本地時(shí)間的字符串表示。
    • 原型:char *ctime(const time_t *timep);
    • 返回值:返回一個(gè)指向以 null 結(jié)尾的字符串的指針,該字符串表示本地時(shí)間。
  • localtime():

    • 功能:將 time_t 值轉(zhuǎn)換為表示本地時(shí)間的 tm 結(jié)構(gòu)體。
    • 原型:struct tm *localtime(const time_t *timep);
    • 返回值:返回一個(gè)指向 tm 結(jié)構(gòu)體的指針,該結(jié)構(gòu)體包含本地時(shí)間。
  • gmtime():

    • 功能:將 time_t 值轉(zhuǎn)換為表示 UTC 時(shí)間的 tm 結(jié)構(gòu)體。
    • 原型:struct tm *gmtime(const time_t *timep);
    • 返回值:返回一個(gè)指向 tm 結(jié)構(gòu)體的指針,該結(jié)構(gòu)體包含 UTC 時(shí)間。
  • difftime():

    • 功能:計(jì)算兩個(gè) time_t 值之間的差異(以秒為單位)。
    • 原型:double difftime(time_t time1, time_t time2);
    • 返回值:返回兩個(gè)時(shí)間之間的差異。
  • mktime():

    • 功能:將 tm 結(jié)構(gòu)體轉(zhuǎn)換為 time_t 值。
    • 原型:time_t mktime(struct tm *timeptr);
    • 返回值:返回表示時(shí)間的時(shí)間戳。
  • asctime():

    • 功能:將 tm 結(jié)構(gòu)體轉(zhuǎn)換為 24 小時(shí)制的時(shí)間字符串。
    • 原型:char *asctime(const struct tm *timeptr);
    • 返回值:返回一個(gè)指向以 null 結(jié)尾的字符串的指針,該字符串表示時(shí)間。
  • strftime():

    • 功能:根據(jù)指定的格式將 time_t 或 tm 結(jié)構(gòu)體的時(shí)間格式化為字符串。
    • 原型:size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr);
    • 返回值:返回寫入的字符數(shù)。

代碼示例:

以下是如何使用 time.h 頭文件中的 time() 函數(shù)來計(jì)算遞歸與非遞歸程序的一個(gè)簡單示例:

#include<iostream>
#include<time.h>

using namespace std;
typedef long long ll;

ll n, sum=1;

ll fun(int dep) {//遞歸函數(shù)
	if (dep == 1) {
		return 1;
	}
	else {
		return 2 * (fun(dep - 1) + 1);
	}
}
void test0() {//非遞歸直接利用數(shù)學(xué)公式推理
	cin >> n;
	for (int i = 0; i < n-1; i++) {
		sum = (sum + 1) * 2;
	}
	cout << sum << endl;
}
void test01() {
	cin >> n;
	cout << fun(n) << endl;
}
	
int main(){
	
	time_t start=time(NULL);//開始時(shí)間
	
	test01();//這里填寫您測試的代碼
	
	time_t end =time(NULL);//結(jié)束時(shí)間
	double dif_time=difftime(end, start);//計(jì)算差值
	cout<<dif_time<<endl;
	return 0;
}

對于這種計(jì)算算法的執(zhí)行效率肯定是不會(huì)考的,可能在測試以及開發(fā)過程中使用,大家看看圖一樂就行。

到此這篇關(guān)于C/C++計(jì)算程序執(zhí)行時(shí)間的幾種方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C/C++計(jì)算程序執(zhí)行時(shí)間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt QCustomPlot庫簡介(最新推薦)

    Qt QCustomPlot庫簡介(最新推薦)

    QCustomPlot是一款基于Qt的高性能C++繪圖庫,專為二維數(shù)據(jù)可視化設(shè)計(jì),它具有輕量級(jí)、實(shí)時(shí)處理百萬級(jí)數(shù)據(jù)和多圖層支持等特點(diǎn),適用于科學(xué)計(jì)算、工業(yè)監(jiān)控等場景,本文給大家介紹Qt QCustomPlot庫簡介,感興趣的朋友一起看看吧
    2025-07-07
  • 利用Matlab復(fù)刻舉牌加油小人生成器

    利用Matlab復(fù)刻舉牌加油小人生成器

    upuptoyou是一款非常有創(chuàng)意的小工具,可以在線生成舉牌小人,看起來很可愛,也比較有趣,并能用于表白,或節(jié)日送祝福等場景。本文將用Matlab復(fù)刻這一小工具,需要的可以參考一下
    2022-03-03
  • C++中static和const的作用和用法

    C++中static和const的作用和用法

    在C++中,"static"和"const"都是用于修飾變量的關(guān)鍵字,它們具有不同的作用,本文通過代碼示例給大家詳細(xì)的介紹static和const的作用和用法,,需要的朋友可以參考下
    2023-06-06
  • C++實(shí)現(xiàn)二叉樹基本操作詳解

    C++實(shí)現(xiàn)二叉樹基本操作詳解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)二叉樹基本操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • C語言實(shí)現(xiàn)電話簿管理系統(tǒng)課程設(shè)計(jì)

    C語言實(shí)現(xiàn)電話簿管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)電話簿管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • c/c++靜態(tài)庫之間相互調(diào)用的實(shí)戰(zhàn)案例

    c/c++靜態(tài)庫之間相互調(diào)用的實(shí)戰(zhàn)案例

    C++調(diào)用C的函數(shù)比較簡單,直接使用extern "C" {}告訴編譯器用C的規(guī)則去編譯C代碼就可以了,下面這篇文章主要給大家介紹了關(guān)于c/c++靜態(tài)庫之間相互調(diào)用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • C++ 中循環(huán)鏈表和約瑟夫環(huán)

    C++ 中循環(huán)鏈表和約瑟夫環(huán)

    這篇文章主要介紹了C++ 中循環(huán)鏈表和約瑟夫環(huán)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++ AVLTree高度平衡的二叉搜索樹深入分析

    C++ AVLTree高度平衡的二叉搜索樹深入分析

    這篇文章主要介紹了C++ AVLTree高度平衡的二叉搜索樹,二叉搜索樹雖可以縮短查找的效率,但如果數(shù)據(jù)有序或接近有序二叉搜索樹將退化為單支樹,查找元素相當(dāng)于在順序表中搜索元素,效率低下
    2023-03-03
  • C++之普通成員函數(shù)、虛函數(shù)以及純虛函數(shù)的區(qū)別與用法要點(diǎn)

    C++之普通成員函數(shù)、虛函數(shù)以及純虛函數(shù)的區(qū)別與用法要點(diǎn)

    本篇文章主要介紹了C++中的普通成員函數(shù)、虛函數(shù)以及純虛函數(shù),非常的詳細(xì),有需要的朋友可以參考下
    2015-07-07
  • C++函數(shù)模板學(xué)習(xí)示例教程指南

    C++函數(shù)模板學(xué)習(xí)示例教程指南

    這篇文章主要為大家介紹了C++函數(shù)模板學(xué)習(xí)示例教程指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評論

红桥区| 伊宁县| 博客| 彰化县| 望谟县| 班玛县| 宽甸| 自治县| 鄂尔多斯市| 镇宁| 奉贤区| 桐梓县| 大港区| 徐州市| 阳信县| 清苑县| 嘉兴市| 通许县| 探索| 武强县| 宁波市| 楚雄市| 江西省| 浦县| 罗甸县| 依安县| 江西省| 武定县| 曲麻莱县| 博客| 化隆| 凤翔县| 灵璧县| 黑河市| 浑源县| 邮箱| 屯门区| 楚雄市| 金堂县| 宁德市| 阳春市|