stl中的順序容器和關(guān)聯(lián)容器 C語言中鏈表的具體用途?
C語言中鏈表的具體用途?鏈表主要用于管理長(zhǎng)度或數(shù)量不確定的數(shù)據(jù)。與數(shù)組相比,鏈表在處理這類數(shù)據(jù)時(shí)節(jié)省內(nèi)存。動(dòng)態(tài)語言通常不會(huì)。;不需要鏈表,因?yàn)閯?dòng)態(tài)語言的解釋器幫助你管理內(nèi)存,但是當(dāng)你對(duì)空間效率或者插入
C語言中鏈表的具體用途?
鏈表主要用于管理長(zhǎng)度或數(shù)量不確定的數(shù)據(jù)。與數(shù)組相比,鏈表在處理這類數(shù)據(jù)時(shí)節(jié)省內(nèi)存。動(dòng)態(tài)語言通常不會(huì)。;不需要鏈表,因?yàn)閯?dòng)態(tài)語言的解釋器幫助你管理內(nèi)存,但是當(dāng)你對(duì)空間效率或者插入效率有特殊要求的時(shí)候,你也可以在動(dòng)態(tài)語言中使用鏈表。鏈表常用于在程序中臨時(shí)存儲(chǔ)一組長(zhǎng)度不定的線性數(shù)據(jù)。具有這種特征的數(shù)據(jù)可以用鏈表保存:
1、數(shù)據(jù)逐漸增加
2.數(shù)據(jù)的長(zhǎng)度是不定的,所以在存儲(chǔ)第一個(gè)數(shù)據(jù)之前,很難確定未來要存儲(chǔ)多少數(shù)據(jù)的上限,或者雖然可以確定上限,但在大多數(shù)情況下遠(yuǎn)大于數(shù)據(jù)的可能長(zhǎng)度,所以一次性按照上限分配空間是不劃算的。鏈表可以在每次需要添加新數(shù)據(jù)時(shí)申請(qǐng)內(nèi)存,不會(huì)造成浪費(fèi),也不會(huì)因?yàn)橐淮紊暾?qǐng)不夠而限制數(shù)據(jù)量。
3,不需要根據(jù)序列號(hào)隨機(jī)存取數(shù)據(jù)。列表容器是在C STL中提供的,它是一個(gè)鏈表。同時(shí),STL還提供了一個(gè)vector容器,也可以用來處理具有上述特征的數(shù)據(jù),vector還支持隨機(jī)訪問(即可以忽略上面第3點(diǎn)中的要求)。但是,在添加數(shù)據(jù)時(shí),如果原來分配的連續(xù)內(nèi)存已經(jīng)用完,vector需要重新分配內(nèi)存并復(fù)制原始數(shù)據(jù)。此時(shí)其插入數(shù)據(jù)的動(dòng)作時(shí)間復(fù)雜度不是O(1)(不是一個(gè)常數(shù)時(shí)間)。因此,除了上述特征之外,如果具備以下第四個(gè)特征,那么鏈表就是最佳選擇:
4.我希望每次添加和刪除數(shù)據(jù)的時(shí)間復(fù)雜度是O(1)(常數(shù)時(shí)間)。
博途stl程序總結(jié)?
1)容器是一種數(shù)據(jù)結(jié)構(gòu),如list、vector和deques,由template類的方法提供。為了訪問容器中的數(shù)據(jù),可以使用容器類輸出的迭代器;
2)迭代器,它提供了訪問容器中對(duì)象的方法。例如,您可以使用一對(duì)迭代器來指定列表或向量中的對(duì)象范圍。迭代器就像一個(gè)指針。其實(shí)C的指針也是迭代器。然而;迭代器也可以是為運(yùn)算符*()和其他類似指針的運(yùn)算符定義方法的類對(duì)象。
3)算法是用于操縱容器中的數(shù)據(jù)的模板函數(shù)。例如,STL使用sort()對(duì)向量中的數(shù)據(jù)進(jìn)行排序,使用find()在列表中搜索對(duì)象。函數(shù)本身與它們所操作的數(shù)據(jù)的結(jié)構(gòu)和類型無關(guān),因此它們可以用于從簡(jiǎn)單數(shù)組到高度復(fù)雜容器的任何數(shù)據(jù)結(jié)構(gòu)。