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

正文內容

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

2025-08-04 08:52本頁面
  

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