freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c數(shù)據(jù)類(lèi)型-資料下載頁(yè)

2025-08-04 08:52本頁(yè)面
  

【正文】 e, pooh }。sort( ia, ia+6 )。sort( sa, sa+3 )。}更一般化的是,標(biāo)準(zhǔn)庫(kù)提供了一組類(lèi),它們封裝了容器和指針的抽象。vector容器類(lèi)型vector類(lèi)為內(nèi)置數(shù)組提供了一種替代表示,通常我們建議使用vector。(但是仍然有許多程序環(huán)境必須使用內(nèi)置數(shù)組,例如處理命令行選項(xiàng))與string類(lèi)一樣,vector類(lèi)是隨標(biāo)準(zhǔn)C++引入的標(biāo)準(zhǔn)庫(kù)的一部分。為了使用vector,我們必須包含相關(guān)的頭文件:include vector使用vector有兩種不同的形式,即所謂的數(shù)組習(xí)慣和STL習(xí)慣。在數(shù)組習(xí)慣用法中,我們模仿內(nèi)置數(shù)組的用法:定義一個(gè)已知長(zhǎng)度的vector:vector int ivec( 10 )。這與如下定義一個(gè)包含十個(gè)元素的內(nèi)置數(shù)組相似:int ia[ 10 ]。我們可以用下標(biāo)操作符訪問(wèn)vector的元素,與訪問(wèn)內(nèi)置數(shù)組的元素的方式一樣。例如:void simple_example(){const int elem_size = 10。vector int ivec( elem_size )。int ia[ elem_size ]。for ( int ix = 0。 ix elem_size。 ++ix )ia[ ix ] = ivec[ ix ]。// ...}我們可以用size()查詢vector的大小,也可以用empty()測(cè)試它是否為空。例如:void print_vector( vectorint ivec ){if ( () )return。for ( int ix = 0。 ix ()。 ++ix )cout ivec[ ix ] 39。 39。}vector的元素被初始化為與其類(lèi)型相關(guān)的缺省值,算術(shù)和指針類(lèi)型的缺省值是0,對(duì)于class類(lèi)型,缺省值可通過(guò)調(diào)用這類(lèi)的缺省構(gòu)造函數(shù)獲得,我們還可以為每個(gè)元素提供一個(gè)顯式的初始值來(lái)完成初始化。例如:vector int ivec( 10, 1 )。定義了ivec,它包含十個(gè)int型的元素,每個(gè)元素都被初始化為1。對(duì)于內(nèi)置數(shù)組,我們可以顯式地把數(shù)組的元素初始化為一組常量值。例如:int ia[ 6 ] = { 2, 1, 0, 1, 2, 1024 }。我們不能用同樣的方式顯式地初始化vector。但是,可以將vector初始化為一個(gè)已有數(shù)組的全部或一部分,只需指定希望被用來(lái)初始化vector的數(shù)組的開(kāi)始地址以及數(shù)組最末元素的下一位置來(lái)實(shí)現(xiàn)。例如:// 把ia 的6 個(gè)元素拷貝到ivec 中vector int ivec( ia, ia+6 )。被傳遞給ivec的兩個(gè)指針標(biāo)記了用來(lái)初始化對(duì)象的值的范圍。第二個(gè)指針總是指向要被拷貝的末元素的下一位置,標(biāo)記出來(lái)的元素范圍也可以是數(shù)組的一個(gè)子集。例如:// 拷貝3 個(gè)元素ia[2], ia[3], ia[4]vector int ivec( amp。ia[ 2 ], amp。ia[ 5 ] )。與內(nèi)置數(shù)組不同,vector可以被另一個(gè)vector初始化,或被賦給另一個(gè)vector。例如:vector string svec。void init_and_assign(){// 用另一個(gè)vector 初始化一個(gè)vectorvector string user_names( svec )。// ...// 把一個(gè)vector 拷貝給另一個(gè)vectorsvec = user_names。}在STL中對(duì)vector的習(xí)慣用法完全不同。我們不是定義一個(gè)已知大小的vector,而是定義一個(gè)空vector:vector string text。我們向vector中插入元素,而不再是索引元素,以及向元素賦值。例如,push_back()操作,就是在vector的后面插入一個(gè)元素。下面的while循環(huán)從標(biāo)準(zhǔn)輸入讀入一個(gè)字符串序列,并每次將一個(gè)字符串插入到vector中:string word。while ( cin word ) {( word )。// ...}雖然我們?nèi)钥梢杂孟聵?biāo)操作符來(lái)迭代訪問(wèn)元素:cout words read are: \n。for ( int ix = 0。 ix ()。 ++ix )cout text[ ix ] 39。 39。cout endl。但是,更典型的做法是使用vector操作集中的begin()和end()所返回的迭代器(iterator)對(duì):cout words read are: \n。for ( vectorstring::iterator it = ()。it != ()。 ++it )cout *it 39。 39。cout endliterator是標(biāo)準(zhǔn)庫(kù)中的類(lèi),它具有指針的功能。*it。對(duì)迭代器解引用,并訪問(wèn)其指向的實(shí)際對(duì)象。++it。向前移動(dòng)迭代器it,使其指向下一個(gè)元素。注意,不要混用這兩種習(xí)慣用法。例如,下面的定義:vector int ivec。定義了一個(gè)空的vector,再寫(xiě)這樣的語(yǔ)句:ivec[ 0 ] = 1024。就是錯(cuò)誤的,因?yàn)閕vec還沒(méi)有第一個(gè)元素。我們只能索引vector中已經(jīng)存在的元素。Size()操作返回vector包含的元素的個(gè)數(shù)。類(lèi)似地,當(dāng)我們用一個(gè)給定的大小定義一個(gè)vector時(shí),例如:vectorint ia( 10 )。任何一個(gè)插入操作都將增加vector的大小,而不是覆蓋某個(gè)現(xiàn)有的元素。這看起來(lái)好像是很顯然的,但是,下面的錯(cuò)誤在初學(xué)者中并不少見(jiàn):const int size = 7。int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 }。vector int ivec( size )。for ( int ix = 0。 ix size。 ++ix )( ia[ ix ])。程序結(jié)束時(shí)ivec包含14個(gè)元素,ia的元素從第八個(gè)元素開(kāi)始插入。另外,在STL習(xí)慣用法下,vector的一個(gè)或多個(gè)元素可以被刪除。復(fù)數(shù)類(lèi)型復(fù)數(shù)(plex number)類(lèi)是標(biāo)準(zhǔn)庫(kù)的一部分。為了能夠使用它,我們必須包含其相關(guān)的頭文件:include plex每個(gè)復(fù)數(shù)都有兩部分:實(shí)數(shù)部分和虛數(shù)部分。虛數(shù)代表負(fù)數(shù)的平方根,這個(gè)術(shù)語(yǔ)是由笛卡兒首創(chuàng)的。復(fù)數(shù)的一般表示法如下:2 + 3i這里2代表實(shí)數(shù)部分,而3i表示虛數(shù)部分。這兩部分合起來(lái)表示單個(gè)復(fù)數(shù)。復(fù)數(shù)對(duì)象的定義一般可以使用以下形式:// 純虛數(shù)0 + 7iplex double purei( 0, 7 )。// 虛數(shù)部分缺省為0 3 + 0iplex float real_num( 3 )。// 實(shí)部和虛部均缺省為0 0 + 0iplex long double zero。// 用另一個(gè)復(fù)數(shù)對(duì)象來(lái)初始化一個(gè)復(fù)數(shù)對(duì)象plex double purei2( purei )。這里,復(fù)數(shù)對(duì)象有float, double或long double幾種表示。我們也可以聲明復(fù)數(shù)對(duì)象的數(shù)組:plex double conjugate[ 2 ] = {plex double ( 2, 3 ),plex double ( 2, 3 )}。我們也可以聲明指針或引用:plex double *ptr = amp。conjugate[0]。plex double amp。ref = *ptr。復(fù)數(shù)支持加、減、乘、除和相等比較。另外,它也支持對(duì)實(shí)部和虛部的訪問(wèn)。typedef名字typedef機(jī)制為我們提供了一種通用的類(lèi)型定義設(shè)施,可以用來(lái)為內(nèi)置的或用戶定義的數(shù)據(jù)類(lèi)型引入助記符號(hào)。例如:typedef double wages。typedef vectorint vec_int。typedef vec_int test_scores。typedef bool in_attendance。typedef int *Pint。這些typedef名字在程序中可被用途類(lèi)型標(biāo)識(shí)符:// double hourly, weekly。wages hourly, weekly。// vectorint vec1( 10 )。vec_int vec1( 10 )。// vectorint test0( class_size )。const int class_size = 34。test_scores test0( class_size )。// vector bool attendance。vector in_attendance attendance( class_size )。// int *table[ 10 ]。Pint table[ 10 ]。typedef定義以關(guān)鍵字typedef開(kāi)始,后面是數(shù)據(jù)類(lèi)型和標(biāo)識(shí)符。這里的標(biāo)識(shí)符即typedef名字,它并沒(méi)有引入一種新的類(lèi)型,而只是為現(xiàn)有類(lèi)型引入了一個(gè)助記符號(hào)。typedef名字對(duì)于出現(xiàn)在任何類(lèi)型名能夠出現(xiàn)的地方。typedef名字可以被用作程序文檔的輔助說(shuō)明,它也能夠降低聲明的復(fù)雜度。例如,在典型情況下,typedef名字可以用來(lái)增強(qiáng)“復(fù)雜模板聲明的定義”的可讀性,增強(qiáng)“指向函數(shù)的指針”以及“指向類(lèi)的成員函數(shù)的指針”的可讀性。下面是一個(gè)幾乎所有人剛開(kāi)始時(shí)都會(huì)答錯(cuò)的問(wèn)題,錯(cuò)誤在于將typedef當(dāng)作宏擴(kuò)展。已知下面的typedef:typedef char *cstring。在以下聲明中,cstr的類(lèi)型是什么?extern const cstring cstr。第一個(gè)回答差不多都是:const char *cstr即指向const字符的指針。但是,這是不正確的。const修飾cstr的類(lèi)型。cstr是一個(gè)指針,因此,這個(gè)定義聲明了cstr是一個(gè)指向字符的const指針。char *const cstr。volatile限定修飾符當(dāng)一個(gè)對(duì)象的值可能會(huì)在編譯器的控制或監(jiān)測(cè)之外被改變時(shí),例如一個(gè)被系統(tǒng)時(shí)鐘更新的變量,那么該對(duì)象應(yīng)該聲明成volatile。因此,編譯器執(zhí)行的某些例行優(yōu)化行為不能應(yīng)用在已指定為volatile的對(duì)象上。volatile限定修飾符的用法同const非常相似—都是作為類(lèi)型的附加修飾符。例如:volatile int display_register。volatile Task *curr_task。volatile int ixa[ max_size ]。volatile Screen bitmap_buf。display_register是一個(gè)int型的volatile對(duì)象。curr_task是一個(gè)指向volatile的Task類(lèi)對(duì)象的指針。ixa是一個(gè)volatile的整型數(shù)組。數(shù)組的每個(gè)元素都被認(rèn)為是volatile的。bitmap_buf是一個(gè)volatile的Screen類(lèi)對(duì)象,它的每個(gè)數(shù)據(jù)成員都被視為volatile的。 volatile修飾符的主要目的是提示編譯器,該對(duì)象的值可能在編譯器未監(jiān)測(cè)到的情況下被改變。因此編譯器不能武斷地對(duì)引用這些對(duì)象的代碼作優(yōu)化處理。pair類(lèi)型pair類(lèi)也是標(biāo)準(zhǔn)庫(kù)的一部分,它使得我們可以在單個(gè)對(duì)象內(nèi)部把相同類(lèi)型或不同類(lèi)型的兩個(gè)值關(guān)聯(lián)起來(lái)。為了使用pair類(lèi),我們必須包含下面的頭文件:include utility例如:pair string, string author( James, Joyce )。創(chuàng)建了一個(gè)pair對(duì)象author,它包含兩個(gè)字符串,分別被初始化為“James”和“Joyce”。我們可以用成員訪問(wèn)符號(hào)(member access notation)訪問(wèn)pair中的單個(gè)元素,它們的名字為first和second。例如:string firstBook。if ( == James amp。amp。 == Joyce )firstBook = Stephen Hero。如果我們希望定義大量相同pair類(lèi)型的對(duì)象,那么最方便的做法就是用typedef,如下所示:typedef pair string, string Authors。Authors proust( marcel, proust )。Authors joyce( james, joyce )。Authors musil( robert, musil )。下面是第二個(gè)pair。一個(gè)元素持有對(duì)象的名字,另一個(gè)元素持有指向其符號(hào)表入口的指針:// 前向聲明(forward declaration)class EntrySlot。extern EntrySlot* look_up( string )。typedef pair string, EntrySlot* SymbolEntry。SymbolEntry current_entry( author, look_up( author ))。// ...if ( EntrySlot *it = look_up( editor )){ = editor。 = it。}類(lèi)類(lèi)型類(lèi)機(jī)制支持新類(lèi)型的設(shè)計(jì),如本章討論的基于對(duì)象的string,vector,plex, pair類(lèi)型,這個(gè)實(shí)現(xiàn)將著重說(shuō)明C++對(duì)操作符重載(operator overloading)的支持。現(xiàn)在我們對(duì)String類(lèi)應(yīng)該做些什么已經(jīng)很清楚:我們需要支持String對(duì)象的初始化和賦值,包括用字符串文字、C風(fēng)格字符串。以及另外一個(gè)String對(duì)象進(jìn)行初始化或者賦值,我們將通過(guò)特定的構(gòu)造函數(shù)以及類(lèi)特定的“賦值操作符”實(shí)例來(lái)實(shí)現(xiàn)這樣的功能。我們需要支持用索引訪問(wèn)String中的單個(gè)字符,以便與C風(fēng)格字符串和標(biāo)準(zhǔn)庫(kù)string類(lèi)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1