久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

標(biāo)準(zhǔn)模板類(STL)(一),,綜述、容器及其操作

 quandsu 2013-09-04

C++的 STL 是一個(gè)功能強(qiáng)大的庫(kù),,它是建立在模板機(jī)制上,,能夠滿足用戶對(duì)存儲(chǔ)管理不同類型數(shù)據(jù)的通用容器和施加在這些容器上的通用算法的巨大需求,并且具有完全的可移植性,。因此在尋求程序的解決方案時(shí),,應(yīng)該首先在 STL 中尋求恰當(dāng)?shù)娜萜骱退惴ā?/font>

STL 是一個(gè)通用性極高的編程工具,這種通用性不僅表現(xiàn)在可以使用通用的容器存儲(chǔ)和管理任意類型的數(shù)據(jù),,更重要的是可以對(duì)不同的容器施加統(tǒng)一通用的算法和操作,。實(shí)現(xiàn)這種通用性的關(guān)鍵思想就是:通過(guò)引進(jìn)一個(gè)間接層對(duì)象對(duì)不同結(jié)構(gòu)的數(shù)據(jù)容器進(jìn)行統(tǒng)一的訪問(wèn)操作,從而簡(jiǎn)化了對(duì)容器的操作,,使得實(shí)現(xiàn)操作的算法和函數(shù)通用化,。這種思想是 STL 的設(shè)計(jì)原則之一,也是軟件設(shè)計(jì)中一個(gè)重要設(shè)計(jì)思想,。 在 STL 中對(duì)容器訪問(wèn)的簡(jiǎn)化和獨(dú)立就是通過(guò)循環(huán)子實(shí)現(xiàn)的,,循環(huán)子可以無(wú)須依據(jù)某種特定容器的數(shù)據(jù)結(jié)構(gòu)而完成對(duì)容器元素的訪問(wèn),從而使得數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與施加于數(shù)據(jù)的操作相互獨(dú)立,。標(biāo)準(zhǔn)模板庫(kù) STL 由容器類模板,,用于訪問(wèn)這些容器的循環(huán)子類模板和可以通過(guò)循環(huán)子在這些容器上實(shí)現(xiàn)的各種算法類模板以及函數(shù)類模板組成的。STL 為這種標(biāo)準(zhǔn)算法和函數(shù)(包括用戶定義的函數(shù))借助循環(huán)子在容器上實(shí)現(xiàn)的應(yīng)用建立了統(tǒng)一的規(guī)則,。

容器:可容納各種數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu),。

迭代器:可依次存取容器中元素的東西,,連接容器和算法

算法:用來(lái)操作容器中的元素的函數(shù)模板。例如,,STLsort()來(lái)對(duì)一個(gè)vector中的數(shù)據(jù)進(jìn)行排序,,用find()來(lái)搜索一個(gè)list中的對(duì)象。

函數(shù)本身與他們操作的數(shù)據(jù)的結(jié)構(gòu)和類型無(wú)關(guān),,因此他們可以在從簡(jiǎn)單數(shù)組到高度復(fù)雜容器的任何數(shù)據(jù)結(jié)構(gòu)上使用,。

比如,,數(shù)組int array[100]就是個(gè)容器,,而 int * 類型的指針變量就可以作為迭代器,,可以為這個(gè)容器編寫一個(gè)排序的算法

一、容器

()容器綜述

    標(biāo)準(zhǔn)庫(kù)中定義了兩種標(biāo)準(zhǔn)的容器:

1,、序列容器(Sequence):向量 vector,、表 list 和雙向隊(duì)列 deque

vector:后部插入/刪除,,直接訪問(wèn)
deque:前/后部插入/刪除,,直接訪問(wèn)
list:雙向鏈表,,任意位置插入/刪除

2,、關(guān)聯(lián)容器 (Associative container)

映射 mapmultimap 和集合 set,、multiset,。

set:快速查找,無(wú)重復(fù)元素
multiset :快速查找,,可有重復(fù)元素
map:一對(duì)一映射,,無(wú)重復(fù)元素,基于關(guān)鍵字查找
multimap :一對(duì)一映射,,可有重復(fù)元素,,基于關(guān)鍵字查找

前兩種合稱為第一類容器。

3,、序列轉(zhuǎn)接器容器(又名容器適配器)Sequence Adapter

    是一種可以改變函數(shù)對(duì)象或容器接口的組件,。

   序列轉(zhuǎn)接器:堆棧 stack、隊(duì)列 queue 和優(yōu)先級(jí)隊(duì)列priority_queue,。

stackLIFO
queueFIFO
priority_queue:優(yōu)先級(jí)高的元素先出 

對(duì)象被插入容器中時(shí),,被插入的是對(duì)象的一個(gè)復(fù)制品。

4,、預(yù)定義數(shù)組,、字符串類 string、數(shù)值數(shù)組類 valarray 和位集合 bitset 均可以視為容器,,但不是標(biāo)準(zhǔn)容器,。標(biāo)準(zhǔn)容器的成員絕大部分都具有共同的成員名,。,

1)類型成員

value_type

元素類型

allocator_type

內(nèi)存管理器類型

size_type

下標(biāo),,元素計(jì)數(shù)類型

difference_type

循環(huán)子之間差的類型

iterator

循環(huán)子,,相當(dāng)于value_type*

const_iterator

常循環(huán)子,相當(dāng)于const value_type*

reverse_iterator

逆序循環(huán)子,,相當(dāng)于value_type*

const_reverse_iterator

常逆序循環(huán)子,,相當(dāng)于const value_type*

reference

元素引用,相當(dāng)于value_type&

const_reference

元素常引用,,相當(dāng)于const value_type&

key_type

關(guān)鍵字類型(只用于關(guān)聯(lián)包容器)

mapped_type

映射值類型(只用于關(guān)聯(lián)包容器)

key_compare

比較標(biāo)準(zhǔn)類型(只用于關(guān)聯(lián)包容器)

2)循環(huán)子操作

begin()

指向第一個(gè)元素

end()

指向最后一個(gè)元素的后一個(gè)位置

rbegin()

指向逆序的第一個(gè)元素

rend()

指向逆序的最后一個(gè)元素的后一個(gè)位置

35,、標(biāo)準(zhǔn)模板類(STL)(一),綜述,、容器及其操作 - EdwardLewis - 墨涵天地

3)訪問(wèn)元素操作

front()

訪問(wèn)第一個(gè)元素

back()

訪問(wèn)最后一個(gè)元素

[]

無(wú)測(cè)試的下標(biāo)訪問(wèn)(不用于list

at()

有測(cè)試的下標(biāo)訪問(wèn)(只用于vectordeque

front():返回容器中第一個(gè)元素的引用,,back():返回容器中最后一個(gè)元素的引用。比如,,查 list::front help,得到的定義是:

reference front(); 

const_reference front() const;

list有兩個(gè)front函數(shù)

reference 和 const_reference typedef的類型

對(duì)于 list<double> , 

list<double>::reference  實(shí)際上就是 double &

list<double>::const_reference  實(shí)際上就是 const double &

對(duì)于 list<int> , 

list<int>::refrence  實(shí)際上就是 int &

list<int>::const_refreence  實(shí)際上就是 const int &

4)堆棧和隊(duì)列操作

push_back()

將新元素加入到尾部

pop_back()

移出最后一個(gè)元素

push_front()

將新元素加入/插入頭部(只用于listdeque

pop_front()

移出/刪除第一個(gè)元素(只用于listdeque

push_back(): 在容器末尾增加新元素

pop_back(): 刪除容器末尾的元素

5)表操作

insert(p,x)

將元素x加入到p之前

insert(p,n,x)

p之前加入n個(gè)x的拷貝

insert(p,first,last)

p之前加入?yún)^(qū)間[first,last)中的序列

erase(p)

刪除p處的元素

erase(first,last)

刪除區(qū)間[first,last)中的序列

clear()

清除所有的元素

6)其他操作

size()

獲取元素個(gè)數(shù)

empty()

測(cè)試包容器是否為空

max_size()

最大可能的包容器的大小

capacity()

為向量包容器分配的空間(只用于vector

reserve()

為擴(kuò)充向量包容器保留空間(只用于vector

resize()

改變包容器的大?。ㄖ挥糜?font face="Book Antiqua">vector,listdeque

swap()

交換兩個(gè)包容器中的元素

get_allocator()

獲取包容器的內(nèi)存管理器的副本

==

測(cè)試兩個(gè)包容器的內(nèi)容是否相等

!=

測(cè)試兩個(gè)包容器的內(nèi)容是否不同

<

測(cè)試一個(gè)包容器是否在另一個(gè)包容器字典序之前

7)構(gòu)造函數(shù),析構(gòu)函數(shù)

container()

構(gòu)造一個(gè)空容器

container(n)

用缺省值構(gòu)造n個(gè)元素的容器(不能用于關(guān)聯(lián)包容器)

container(n,x)

構(gòu)造具有n個(gè)x拷貝的容器(不能用于關(guān)聯(lián)包容器)

container(first,last)

初始化容器區(qū)間[first,last)上的元素

container(x)

容器拷貝構(gòu)造函數(shù)

~container()

析構(gòu)容器和它的全部元素

8)分配操作

operator=(x)

從容器中x元素拷貝分配

assign(n,x)

為容器分配n個(gè)x的拷貝(不用于關(guān)聯(lián)容器)

assign(first,last)

在容器的[first,last)區(qū)間中分配

9)關(guān)聯(lián)操作

operator[](k)

訪問(wèn)帶有關(guān)鍵字k的元素(用于具有唯一關(guān)鍵字的包容器)

find(k)

查找?guī)в嘘P(guān)鍵字k的元素

lower_bound(k)

查找?guī)в嘘P(guān)鍵字k的第一個(gè)元素

upper_bound(k)

查找?guī)в写笥?font face="Book Antiqua">k的關(guān)鍵字的第一個(gè)元素

equal_range(k)

查找?guī)в嘘P(guān)鍵字k的元素的lower_boundupper_bound

key_comp()

獲取關(guān)鍵字比較對(duì)象的拷貝

value_comp()

獲取映射值比較對(duì)象的拷貝

10)標(biāo)準(zhǔn)容器的操作比較(復(fù)雜度)


[]操作

表操作

Front操作

Back操作

循環(huán)子

vector

const

O(n)+


const+

Ran

list


const

const

const

Bi

deque

const

O(n)

const

const

Ran

stack




const


queue



const

const


priority_queue



O(log(n))

O(log(n))


map

O(log(n))

O(log(n))+



Bi

Multimap


O(log(n))+



Bi

set


O(log(n))+



Bi

multiset


O(log(n))+



Bi

string

const

O(n)+

O(n)+

O(n)+

Ran

array

const




Ran

valarray

const




Ran

bitset

const




Ran

表中各種容器所對(duì)應(yīng)的表項(xiàng)的含義如下:

① 空表項(xiàng):表示容器無(wú)此項(xiàng)操作,。

② const:表示容器此項(xiàng)操作的時(shí)間復(fù)雜度為常量,。

③ O(n):表示容器此項(xiàng)操作的時(shí)間復(fù)雜度與容器中元素個(gè)數(shù)n的線性相關(guān)。

④ O(n)+:表示容器此項(xiàng)操作的時(shí)間復(fù)雜度與容器中元素個(gè)數(shù)n線性相關(guān)并且還需要增加一些附加操作時(shí)間花費(fèi),。

⑤ O(log(n)):表示容器此項(xiàng)操作的時(shí)間復(fù)雜度與容器中元素個(gè)數(shù)n對(duì)數(shù)相關(guān),。

⑥ O(log(n))+:表示容器此項(xiàng)操作的時(shí)間復(fù)雜度與容器中元素個(gè)數(shù)n對(duì)數(shù)相關(guān)并且還需要增加一些附加操作時(shí)間花費(fèi)。

⑦ Ran:表示容器對(duì)應(yīng)的循環(huán)子為隨機(jī)訪問(wèn)循環(huán)子,。

⑧ Bi:表示容器對(duì)應(yīng)的循環(huán)子為雙向訪問(wèn)循環(huán)子,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多