欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C/C++內(nèi)存管理

 更新時(shí)間:2021年06月11日 15:19:32   作者:2021dragon  
內(nèi)存管理是C++最令人切齒痛恨的問(wèn)題,也是C++最有爭(zhēng)議的問(wèn)題,C++高手從中獲得了更好的性能,更大的自由,今天給大家分享C/C++內(nèi)存管理的實(shí)例代碼,需要的朋友參考下吧

C/C++賦予程序員管理內(nèi)存的自由,是C/C++語(yǔ)言特色,雖然這引入了復(fù)雜度和危險(xiǎn)性,但另一方面,它也增加了控制力和靈活性,是C/C++獨(dú)特之處,亦是強(qiáng)大之處。

C/C++內(nèi)存分布

讓我們先來(lái)看看下面這段代碼:

int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
	static int staticVar = 1;
	int localVar = 1;
	int num1[10] = { 1, 2, 3, 4 };
	char char2[] = "abcd";
	char* pChar3 = "abcd";
	int* ptr1 = (int*)malloc(sizeof (int)* 4);
	int* ptr2 = (int*)calloc(4, sizeof(int));
	int* ptr3 = (int*)realloc(ptr2, sizeof(int)* 4);
	free(ptr1);
	free(ptr3);
}

你知道代碼中的各個(gè)部分分別存儲(chǔ)在內(nèi)存中的哪一個(gè)區(qū)域嗎?

在這里插入圖片描述

【說(shuō)明】
 1、棧又叫堆棧,用于存儲(chǔ)非靜態(tài)局部變量/函數(shù)參數(shù)/返回值等等,棧是向下增長(zhǎng)的。
 2、內(nèi)存映射段是高效的I/O映射方式,用于裝載一個(gè)共享的動(dòng)態(tài)內(nèi)存庫(kù)。用戶可使用系統(tǒng)接口創(chuàng)建共享內(nèi)存,做進(jìn)程間通信。
 3、堆用于存儲(chǔ)運(yùn)行時(shí)動(dòng)態(tài)內(nèi)存分配,堆是向上增長(zhǎng)的。
 4、數(shù)據(jù)段又叫靜態(tài)區(qū),用于存儲(chǔ)全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)。
 5、代碼段又叫常量區(qū),用于存放可執(zhí)行的代碼和只讀常量。

順便提一下:為什么說(shuō)棧是向下增長(zhǎng)的,而堆是向上增長(zhǎng)的?

在這里插入圖片描述

 簡(jiǎn)單來(lái)說(shuō),在一般情況下,在棧區(qū)開(kāi)辟空間,先開(kāi)辟的空間地址較高,而在堆區(qū)開(kāi)辟空間,先開(kāi)辟的空間地址較低。

例如,下面代碼中,變量a和變量b存儲(chǔ)在棧區(qū),指針c和指針d指向堆區(qū)的內(nèi)存空間:

#include <iostream>
using namespace std;
int main()
{
	//棧區(qū)開(kāi)辟空間,先開(kāi)辟的空間地址高
	int a = 10;
	int b = 20;
	cout << &a << endl;
	cout << &b << endl;

	//堆區(qū)開(kāi)辟空間,先開(kāi)辟的空間地址低
	int* c = (int*)malloc(sizeof(int)* 10);
	int* d = (int*)malloc(sizeof(int)* 10);
	cout << c << endl;
	cout << d << endl;
	return 0;
}

 因?yàn)樵跅^(qū)開(kāi)辟空間,先開(kāi)辟的空間地址較高,所以打印出來(lái)a的地址大于b的地址;在堆區(qū)開(kāi)辟空間,先開(kāi)辟的空間地址較低,所以c指向的空間地址小于d指向的空間地址。

注意:在堆區(qū)開(kāi)辟空間,后開(kāi)辟的空間地址不一定比先開(kāi)辟的空間地址高。因?yàn)樵诙褏^(qū),后開(kāi)辟的空間也有可能位于前面某一被釋放的空間位置。

C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理方式

malloc、calloc、realloc和free
一、malloc

 malloc函數(shù)的功能是開(kāi)辟指定字節(jié)大小的內(nèi)存空間,如果開(kāi)辟成功就返回該空間的首地址,如果開(kāi)辟失敗就返回一個(gè)NULL。傳參時(shí)只需傳入需要開(kāi)辟的字節(jié)個(gè)數(shù)。

二、calloc

 calloc函數(shù)的功能也是開(kāi)辟指定大小的內(nèi)存空間,如果開(kāi)辟成功就返回該空間的首地址,如果開(kāi)辟失敗就返回一個(gè)NULL。calloc函數(shù)傳參時(shí)需要傳入開(kāi)辟的內(nèi)存用于存放的元素個(gè)數(shù)和每個(gè)元素的大小。calloc函數(shù)開(kāi)辟好內(nèi)存后會(huì)將空間內(nèi)容中的每一個(gè)字節(jié)都初始化為0。

三、realloc

 realloc函數(shù)可以調(diào)整已經(jīng)開(kāi)辟好的動(dòng)態(tài)內(nèi)存的大小,第一個(gè)參數(shù)是需要調(diào)整大小的動(dòng)態(tài)內(nèi)存的首地址,第二個(gè)參數(shù)是動(dòng)態(tài)內(nèi)存調(diào)整后的新大小。realloc函數(shù)與上面兩個(gè)函數(shù)一樣,如果開(kāi)辟成功便返回開(kāi)辟好的內(nèi)存的首地址,開(kāi)辟失敗則返回NULL。

realloc函數(shù)調(diào)整動(dòng)態(tài)內(nèi)存大小的時(shí)候會(huì)有三種情況:
 1、原地?cái)U(kuò)。需擴(kuò)展的空間后方有足夠的空間可供擴(kuò)展,此時(shí),realloc函數(shù)直接在原空間后方進(jìn)行擴(kuò)展,并返回該內(nèi)存空間首地址(即原來(lái)的首地址)。
 2、異地?cái)U(kuò)。需擴(kuò)展的空間后方?jīng)]有足夠的空間可供擴(kuò)展,此時(shí),realloc函數(shù)會(huì)在堆區(qū)中重新找一塊滿足要求的內(nèi)存空間,把原空間內(nèi)的數(shù)據(jù)拷貝到新空間中,并主動(dòng)將原空間內(nèi)存釋放(即還給操作系統(tǒng)),返回新內(nèi)存空間的首地址。
 3、擴(kuò)充失敗。需擴(kuò)展的空間后方?jīng)]有足夠的空間可供擴(kuò)展,并且堆區(qū)中也沒(méi)有符合需要開(kāi)辟的內(nèi)存大小的空間。結(jié)果就是開(kāi)辟內(nèi)存失敗,返回一個(gè)NULL。

四、free

 free函數(shù)的作用就是將malloc、calloc以及realloc函數(shù)申請(qǐng)的動(dòng)態(tài)內(nèi)存空間釋放,其釋放空間的大小取決于之前申請(qǐng)的內(nèi)存空間的大小。

 若還想進(jìn)一步了解malloc、calloc、realloc和free,請(qǐng)閱讀C語(yǔ)言動(dòng)態(tài)內(nèi)存管理。

C++中動(dòng)態(tài)內(nèi)存管理方式

 首先,C語(yǔ)言內(nèi)存管理的方式在C++中可以繼續(xù)使用。但有些地方就無(wú)能為力而且使用起來(lái)比較麻煩,因此C++又提出了自己的內(nèi)存管理方式:通過(guò)new和delete操作符進(jìn)行動(dòng)態(tài)內(nèi)存管理。

new和delete操作內(nèi)置類型

一、動(dòng)態(tài)申請(qǐng)單個(gè)某類型的空間

//動(dòng)態(tài)申請(qǐng)單個(gè)int類型的空間
	int* p1 = new int; //申請(qǐng)
	
	delete p1; //銷毀

其作用等價(jià)于:

//動(dòng)態(tài)申請(qǐng)單個(gè)int類型的空間
	int* p2 = (int*)malloc(sizeof(int)); //申請(qǐng)

	free(p2); //銷毀

二、動(dòng)態(tài)申請(qǐng)多個(gè)某類型的空間

//動(dòng)態(tài)申請(qǐng)10個(gè)int類型的空間
	int* p3 = new int[10]; //申請(qǐng)

	delete[] p3; //銷毀

其作用等價(jià)于:

//動(dòng)態(tài)申請(qǐng)10個(gè)int類型的空間
	int* p4 = (int*)malloc(sizeof(int)* 10); //申請(qǐng)
	
	free(p4); //銷毀

三、動(dòng)態(tài)申請(qǐng)單個(gè)某類型的空間并初始化

//動(dòng)態(tài)申請(qǐng)單個(gè)int類型的空間并初始化為10
	int* p5 = new int(10); //申請(qǐng) + 賦值

	delete p5; //銷毀

其作用等價(jià)于:

	//動(dòng)態(tài)申請(qǐng)一個(gè)int類型的空間并初始化為10
	int* p6 = (int*)malloc(sizeof(int)); //申請(qǐng)
	*p6 = 10; //賦值

	free(p6); //銷毀

四、動(dòng)態(tài)申請(qǐng)多個(gè)某類型的空間并初始化

//動(dòng)態(tài)申請(qǐng)10個(gè)int類型的空間并初始化為0到9
	int* p7 = new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //申請(qǐng) + 賦值

	delete[] p7; //銷毀

其作用等價(jià)于:

//動(dòng)態(tài)申請(qǐng)10個(gè)int類型的空間并初始化為0到9
	int* p8 = (int*)malloc(sizeof(int)* 10); //申請(qǐng)
	for (int i = 0; i < 10; i++) //賦值
	{
		p8[i] = i;
	}

	free(p8); //銷毀

注意:申請(qǐng)和釋放單個(gè)元素的空間,使用new和delete操作符;申請(qǐng)和釋放連續(xù)的空間,使用new[ ]和delete[ ]。

new和delete操作自定義類型

對(duì)于以下自定義類型:

class Test
{
public:
	Test() //構(gòu)造函數(shù)
		:_a(0)
	{
		cout << "構(gòu)造函數(shù)" << endl;
	}
	~Test() //析構(gòu)函數(shù)
	{
		cout << "析構(gòu)函數(shù)" << endl;
	}
private:
	int _a;
};

一、動(dòng)態(tài)申請(qǐng)單個(gè)類的空間
用new和delete操作符:

Test* p1 = new Test; //申請(qǐng)
	
	delete p1; //銷毀

用malloc和free函數(shù):

Test* p2 = (Test*)malloc(sizeof(Test)); //申請(qǐng)
	
	free(p2); //銷毀

二、動(dòng)態(tài)申請(qǐng)多個(gè)類的空間
用new和delete操作符:

Test* p3 = new Test[10]; //申請(qǐng)
	
	delete[] p3; //銷毀

用malloc和free函數(shù):

Test* p4 = (Test*)malloc(sizeof(Test)* 10); //申請(qǐng)
	
	free(p4); //銷毀

注意:在申請(qǐng)自定義類型的空間時(shí),new會(huì)調(diào)用構(gòu)造函數(shù),delete會(huì)調(diào)用析構(gòu)函數(shù),而malloc和free不會(huì)。

總結(jié)一下:
 1、C++中如果是申請(qǐng)內(nèi)置類型的對(duì)象或是數(shù)組,用new/delete和malloc/free沒(méi)有什么區(qū)別。
 2、如果是自定義類型,區(qū)別很大,new和delete分別是開(kāi)空間+構(gòu)造函數(shù)、析構(gòu)函數(shù)+釋放空間,而malloc和free僅僅是開(kāi)空間和釋放空間。
 3、建議在C++中無(wú)論是內(nèi)置類型還是自定義類型的申請(qǐng)和釋放,盡量都使用new和delete。

operator new和operator delete函數(shù)

 new和delete是用戶進(jìn)行動(dòng)態(tài)內(nèi)存申請(qǐng)和釋放的操作符,operator new和operator delete是系統(tǒng)提供的全局函數(shù),new和delete在底層是通過(guò)調(diào)用全局函數(shù)operator new和operator delete來(lái)申請(qǐng)和釋放空間的。
 operator new和operator delete的用法和malloc和free的用法完全一樣,其功能都是在堆上申請(qǐng)和釋放空間。

int* p1 = (int*)operator new(sizeof(int)* 10); //申請(qǐng)
	
	operator delete(p1); //銷毀

其作用等價(jià)于:

int* p2 = (int*)operator new(sizeof(int)* 10); //申請(qǐng)
	
	free(p2); //銷毀

 實(shí)際上,operator new的底層是通過(guò)調(diào)用malloc函數(shù)來(lái)申請(qǐng)空間的,當(dāng)malloc申請(qǐng)空間成功時(shí)直接返回;若申請(qǐng)空間失敗,則嘗試執(zhí)行空間不足的應(yīng)對(duì)措施,如果該應(yīng)對(duì)措施用戶設(shè)置了,則繼續(xù)申請(qǐng),否則拋異常。而operator delete的底層是通過(guò)調(diào)用free函數(shù)來(lái)釋放空間的。

在這里插入圖片描述

注意:雖然說(shuō)operator new和operator delete是系統(tǒng)提供的全局函數(shù),但是我們也可以針對(duì)某個(gè)類,重載其專屬的operator new和operator delete函數(shù),進(jìn)而提高效率。

new和delete的實(shí)現(xiàn)原理

內(nèi)置類型

 如果申請(qǐng)的是內(nèi)置類型的空間,new/delete和malloc/free基本類似,不同的是,new/delete申請(qǐng)釋放的是單個(gè)元素的空間,new[ ]/delete [ ]申請(qǐng)釋放的是連續(xù)的空間,此外,malloc申請(qǐng)失敗會(huì)返回NULL,而new申請(qǐng)失敗會(huì)拋異常。

自定義類型

new的原理
 1、調(diào)用operator new函數(shù)申請(qǐng)空間。
 2、在申請(qǐng)的空間上執(zhí)行構(gòu)造函數(shù),完成對(duì)象的構(gòu)造。

delete的原理
 1、在空間上執(zhí)行析構(gòu)函數(shù),完成對(duì)象中資源的清理工作。
 2、調(diào)用operator delete函數(shù)釋放對(duì)象的空間。

new T[N]的原理
 1、調(diào)用operator new[ ]函數(shù),在operator new[ ]函數(shù)中實(shí)際調(diào)用operator new函數(shù)完成N個(gè)對(duì)象空間的申請(qǐng)。
 2、在申請(qǐng)的空間上執(zhí)行N次構(gòu)造函數(shù)。

delete[ ] 的原理
 1、在空間上執(zhí)行N次析構(gòu)函數(shù),完成N個(gè)對(duì)象中資源的清理。
 2、調(diào)用operator delete[ ]函數(shù),在operator delete[ ]函數(shù)中實(shí)際調(diào)用operator delete函數(shù)完成N個(gè)對(duì)象空間的釋放。

定位new和表達(dá)式(placement-new)

 定位new表達(dá)式是在已分配的原始內(nèi)存空間中調(diào)用構(gòu)造函數(shù)初始化一個(gè)對(duì)象。
使用格式:

new(place_address)type 或者 new(place_address)type(initializer-list)

 其中place_address必須是一個(gè)指針,initializer-list是類型的初始化列表。

使用場(chǎng)景:
 定位new表達(dá)式在實(shí)際中一般是配合內(nèi)存池使用,因?yàn)閮?nèi)存池分配出的內(nèi)存沒(méi)有初始化,所以如果是自定義類型的對(duì)象,就需要使用定位new表達(dá)式進(jìn)行顯示調(diào)用構(gòu)造函數(shù)進(jìn)行初始化。

#include <iostream>
using namespace std;
class A
{
public:
	A(int a = 0) //構(gòu)造函數(shù) 
		:_a(a)
	{}

	~A() //析構(gòu)函數(shù)
	{}
private:
	int _a;
};
int main()
{
	//new(place_address)type 形式
	A* p1 = (A*)malloc(sizeof(A));
	new(p1)A;

	//new(place_address)type(initializer-list) 形式
	A* p2 = (A*)malloc(sizeof(A));
	new(p2)A(2021);

	//析構(gòu)函數(shù)也可以顯示調(diào)用
	p1->~A();
	p2->~A();
	return 0;
}

注意:在未使用定位new表達(dá)式進(jìn)行顯示調(diào)用構(gòu)造函數(shù)進(jìn)行初始化之前,malloc申請(qǐng)的空間還不能算是一個(gè)對(duì)象,它只不過(guò)是與A對(duì)象大小相同的一塊空間,因?yàn)闃?gòu)造函數(shù)還沒(méi)有執(zhí)行。

常見(jiàn)面試題

malloc/free和new/delete的區(qū)別?

共同點(diǎn):
 都是從堆上申請(qǐng)空間,并且需要用戶手動(dòng)釋放。
不同點(diǎn):

 1、malloc和free是函數(shù),new和delete是操作符。
 2、malloc申請(qǐng)的空間不會(huì)初始化,new申請(qǐng)的空間會(huì)初始化。
 3、malloc申請(qǐng)空間時(shí),需要手動(dòng)計(jì)算空間大小并傳遞,new只需在其后跟上空間的類型即可。
 4、malloc的返回值是void*,在使用時(shí)必須強(qiáng)轉(zhuǎn),new不需要,因?yàn)閚ew后跟的是空間的類型。
 5、malloc申請(qǐng)失敗時(shí),返回的是NULL,因此使用時(shí)必須判空,new不需要,但是new需要捕獲異常。
 6、申請(qǐng)自定義類型對(duì)象時(shí),malloc/free只會(huì)開(kāi)辟空間,不會(huì)調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù),而new在申請(qǐng)空間后會(huì)調(diào)用構(gòu)造函數(shù)完成對(duì)象的初始化,delete在釋放空間前會(huì)調(diào)用析構(gòu)函數(shù)完成空間中資源的清理。

內(nèi)存泄漏 什么是內(nèi)存泄漏,內(nèi)存泄漏的危害?

內(nèi)存泄漏:

 內(nèi)存泄漏是指因?yàn)槭韬龌蝈e(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存的情況。內(nèi)存泄漏并不是指內(nèi)存在物理上的消失,而是應(yīng)用程序分配某段內(nèi)存后,因?yàn)樵O(shè)計(jì)錯(cuò)誤,失去了對(duì)該段內(nèi)存的控制,因而造成了內(nèi)存的浪費(fèi)。

內(nèi)存泄漏的危害:

 長(zhǎng)期運(yùn)行的程序出現(xiàn)內(nèi)存泄漏,影響很大,如操作系統(tǒng)、后臺(tái)服務(wù)等等,出現(xiàn)內(nèi)存泄漏會(huì)導(dǎo)致響應(yīng)越來(lái)越慢,最終卡死。

void MemoryLeaks()
{
	// 1.內(nèi)存申請(qǐng)了忘記釋放
	int* p1 = (int*)malloc(sizeof(int));
	int* p2 = new int;

	// 2.異常安全問(wèn)題
	int* p3 = new int[10];
	Func(); // 這里Func函數(shù)拋異常導(dǎo)致 delete[] p3未執(zhí)行,p3沒(méi)被釋放.
	delete[] p3;
}

內(nèi)存泄漏分類?

在C/C++中我們一般關(guān)心兩種方面的內(nèi)存泄漏:
1、堆內(nèi)存泄漏(Heap Leak)

 堆內(nèi)存指的是程序執(zhí)行中通過(guò)malloc、calloc、realloc、new等從堆中分配的一塊內(nèi)存,用完后必須通過(guò)調(diào)用相應(yīng)的free或者delete釋放。假設(shè)程序的設(shè)計(jì)錯(cuò)誤導(dǎo)致這部分內(nèi)容沒(méi)有被釋放,那么以后這部分空間將無(wú)法再被使用,就會(huì)產(chǎn)生Heap
Leak。

2、系統(tǒng)資源泄漏

 指程序使用系統(tǒng)分配的資源,比方套接字、文件描述符、管道等沒(méi)有使用對(duì)應(yīng)的函數(shù)釋放掉,導(dǎo)致系統(tǒng)資源的浪費(fèi),嚴(yán)重可導(dǎo)致系統(tǒng)效能減少,系統(tǒng)執(zhí)行不穩(wěn)定。

如何避免內(nèi)存泄漏?

 1、工程前期良好的設(shè)計(jì)規(guī)范,養(yǎng)成良好的編碼規(guī)范,申請(qǐng)的內(nèi)存空間記住匹配的去釋放。
 2、采用RALL思想或者智能指針來(lái)管理資源。
 3、有些公司內(nèi)部規(guī)范使用內(nèi)部實(shí)現(xiàn)的私有內(nèi)存管理庫(kù),該庫(kù)自帶內(nèi)存泄漏檢測(cè)的功能選項(xiàng)。
 4、出問(wèn)題了使用內(nèi)存泄漏工具檢測(cè)。

內(nèi)存泄漏非常常見(jiàn),解決方案分為兩種
 1、事前預(yù)防型。如智能指針等。
 2、事后查錯(cuò)型。如泄漏檢測(cè)工具。

如何一次在堆上申請(qǐng)4G的內(nèi)存?

在堆上申請(qǐng)4G的內(nèi)存:

#include <iostream>
using namespace std;
int main()
{
	//0xffffffff轉(zhuǎn)換為十進(jìn)制就是4G
	void* p = malloc(0xfffffffful);
	cout << p << endl;

	return 0;
}

 在32位的平臺(tái)下,內(nèi)存大小為4G,但是堆只占了其中的2G左右,所以我們不可能在32位的平臺(tái)下,一次性在堆上申請(qǐng)4G的內(nèi)存。這時(shí)我們可以將編譯器上的win32改為x64,即64位平臺(tái),這樣我們便可以一次性在堆上申請(qǐng)4G的內(nèi)存了。

在這里插入圖片描述

以上就是C/C++內(nèi)存管理詳解的詳細(xì)內(nèi)容,更多關(guān)于C++內(nèi)存管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實(shí)現(xiàn)拓?fù)渑判颍ˋOV網(wǎng)絡(luò))

    C++實(shí)現(xiàn)拓?fù)渑判颍ˋOV網(wǎng)絡(luò))

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)拓?fù)渑判?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++對(duì)Json數(shù)據(jù)的友好處理實(shí)現(xiàn)過(guò)程

    C++對(duì)Json數(shù)據(jù)的友好處理實(shí)現(xiàn)過(guò)程

    在Ajax的應(yīng)用中,前臺(tái)基本上會(huì)用到JSON作為數(shù)據(jù)交換格式,所以下面這篇文章主要給大家介紹了關(guān)于C++對(duì)Json數(shù)據(jù)的友好處理,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • C語(yǔ)言數(shù)據(jù)輸入與輸出實(shí)例詳解

    C語(yǔ)言數(shù)據(jù)輸入與輸出實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)輸入與輸出實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳細(xì)談?wù)凜語(yǔ)言中動(dòng)態(tài)內(nèi)存

    詳細(xì)談?wù)凜語(yǔ)言中動(dòng)態(tài)內(nèi)存

    在C語(yǔ)言中,編寫(xiě)程序的時(shí)候不能確定內(nèi)存的大小,希望程序在運(yùn)行的過(guò)程中根據(jù)數(shù)據(jù)量的大小動(dòng)態(tài)的分配內(nèi)存,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中動(dòng)態(tài)內(nèi)存的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • C++常見(jiàn)的stl容器與相關(guān)操作 示例解析

    C++常見(jiàn)的stl容器與相關(guān)操作 示例解析

    所謂容器,就是可以承載,包含元素的一個(gè)器件,它是STL六大組件之一,是容器、算法、迭代器中最重要也是最核心的一部分
    2022-10-10
  • C++中的pair使用詳解

    C++中的pair使用詳解

    pair是定義在<utility>中的生成特定類型的模板,它的作用是把一組數(shù)據(jù)合并為一體,實(shí)際上是一個(gè)擁有兩個(gè)成員變量的struct,這篇文章主要介紹了c++的pair使用,需要的朋友可以參考下
    2022-09-09
  • c/c++內(nèi)存分配大小實(shí)例講解

    c/c++內(nèi)存分配大小實(shí)例講解

    在本篇文章里小編給大家整理了一篇關(guān)于c/c++內(nèi)存分配大小實(shí)例講解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-11-11
  • C++ 實(shí)現(xiàn)的通訊錄管理系統(tǒng)詳解

    C++ 實(shí)現(xiàn)的通訊錄管理系統(tǒng)詳解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語(yǔ)言實(shí)現(xiàn)單鏈表的快速排序算法

    C語(yǔ)言實(shí)現(xiàn)單鏈表的快速排序算法

    大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)單鏈表的快速排序算法,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 如何使用C++結(jié)合OpenCV進(jìn)行圖像處理與分類

    如何使用C++結(jié)合OpenCV進(jìn)行圖像處理與分類

    在計(jì)算機(jī)視覺(jué)領(lǐng)域,OpenCV與C++結(jié)合能高效處理和分類圖像,C++的高執(zhí)行效率適合大規(guī)模數(shù)據(jù)處理,OpenCV提供豐富的功能,如圖像預(yù)處理和機(jī)器學(xué)習(xí)算法,安裝OpenCV需要配置環(huán)境和添加庫(kù)文件,本文詳細(xì)介紹了使用C++和OpenCV進(jìn)行圖像分類的過(guò)程,包括使用SVM和深度學(xué)習(xí)模型
    2024-09-09

最新評(píng)論