亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

引言

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

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

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

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

函數(shù)原型

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

使用實例:

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

#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ù)學公式推理
	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() {
	// 開始時間
    clock_t start = clock();

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

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

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

	return 0;
}

 

第一個是 遞歸的程序占用CPU的時間,第二個是非遞歸的程序占用CPU的時間。

注意事項

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

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

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

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

函數(shù)實例:

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

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

代碼示例:

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

#include <iostream>
#include <chrono>

using namespace std;

int main() {
    // 開始時間點
    auto start = chrono::high_resolution_clock::now();

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

    // 結束時間點
    auto end = chrono::high_resolution_clock::now();

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

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

    return 0;
}

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

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

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

  • time():

    功能:獲取當前時間。

    原型:time_t time(time_t *tloc);

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

    參數(shù):tloc是一個可選的指針,如果提供,函數(shù)會將當前時間存儲在這個指針指向的位置。

  • ctime():

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

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

    • 功能:將 time_t 值轉換為表示 UTC 時間的 tm 結構體。
    • 原型:struct tm *gmtime(const time_t *timep);
    • 返回值:返回一個指向 tm 結構體的指針,該結構體包含 UTC 時間。
  • difftime():

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

    • 功能:將 tm 結構體轉換為 time_t 值。
    • 原型:time_t mktime(struct tm *timeptr);
    • 返回值:返回表示時間的時間戳。
  • asctime():

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

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

代碼示例:

以下是如何使用 time.h 頭文件中的 time() 函數(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ù)學公式推理
	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);//開始時間
	
	test01();//這里填寫您測試的代碼
	
	time_t end =time(NULL);//結束時間
	double dif_time=difftime(end, start);//計算差值
	cout<<dif_time<<endl;
	return 0;
}

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

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

相關文章

  • 你真的知道C++對象大小嗎?

    你真的知道C++對象大小嗎?

    這篇文章主要給大家介紹了關于C++對象大小的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 舉例理解C語言二維數(shù)組的指針指向問題

    舉例理解C語言二維數(shù)組的指針指向問題

    這篇文章主要介紹了C語言二維數(shù)組的指針指向問題,文中不建議用二級指針來訪問二維數(shù)組,需要的朋友可以參考下
    2015-12-12
  • c語言B樹深入理解

    c語言B樹深入理解

    B樹是為磁盤或其他直接存儲設備設計的一種平衡查找樹,本文將詳細介紹c語言B樹,需要的朋友可以參考下
    2012-11-11
  • C++二級指針和指針的引用

    C++二級指針和指針的引用

    這篇文章主要介紹了C++二級指針和指針的引用,下文舉例實現(xiàn)形參指針改變實參指針所指向的對象,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-03-03
  • C 語言基礎教程(我的C之旅開始了)[九]

    C 語言基礎教程(我的C之旅開始了)[九]

    C 語言基礎教程(我的C之旅開始了)[九]...
    2007-02-02
  • C語言判斷數(shù)是否為素數(shù)與素數(shù)輸出

    C語言判斷數(shù)是否為素數(shù)與素數(shù)輸出

    大家好,本篇文章主要講的是C語言判斷數(shù)是否為素數(shù)與素數(shù)輸出,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Qt+GDAL庫實現(xiàn)制作經(jīng)緯度坐標轉換工具

    Qt+GDAL庫實現(xiàn)制作經(jīng)緯度坐標轉換工具

    這篇文章主要為大家詳細介紹了如何利用Qt和GDAL庫實現(xiàn)制作經(jīng)緯度坐標轉換工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • strtok函數(shù)的使用示例

    strtok函數(shù)的使用示例

    今天小編就為大家分享一篇關于strtok函數(shù)的使用示例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++中set的用法學習

    C++中set的用法學習

    Set是C++?STL(標準模板庫)的一個容器類,它用于存儲不同的值,并且可以按照特定順序進行訪問和操作。本文就來通過一些示例和大家簡單講講set的用法吧
    2023-05-05
  • C++使用宏函數(shù)實現(xiàn)單例模板詳解

    C++使用宏函數(shù)實現(xiàn)單例模板詳解

    在我們日常開發(fā)中,無可避免需要使用單例模式進行設計類對象。這篇文章主要介紹了如何使用宏函數(shù)實現(xiàn)單例模板,感興趣的小伙伴可以了解一下
    2023-02-02

最新評論