版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο缶幊碳夹g(shù)與方法(C++)
第10章C++標(biāo)準(zhǔn)庫(kù)第10章C++標(biāo)準(zhǔn)庫(kù)第10章
C++標(biāo)準(zhǔn)庫(kù)
10.1標(biāo)準(zhǔn)庫(kù)組織
10.2容器
10.2.1容器的成員
10.2.2順序容器
10.2.3順序容器適配器
10.2.4關(guān)聯(lián)容器
10.2.5近容器
10.3string 10.4泛型算法
10.5迭代器
10.5.1迭代器的分類(lèi)
10.5.2使用迭代器
10.6函數(shù)對(duì)象
10.7流類(lèi)
10.7.1標(biāo)準(zhǔn)流
10.7.2文件流
10.7.3串流
10.7.4重載提取運(yùn)算符和插入運(yùn)算符
10.7.5輸入/輸出成員函數(shù)
10.7.6輸入/輸出格式控制
10.8數(shù)值計(jì)算
10.8.1數(shù)學(xué)函數(shù)
10.8.2向量計(jì)算
10.8.3復(fù)數(shù)計(jì)算
10.8.4泛型數(shù)值算法
10.8.5隨機(jī)數(shù)產(chǎn)生
10.9小結(jié)第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織10.2容器10.3string10.4泛型算法10.5迭代器 10.6函數(shù)對(duì)象10.7流類(lèi)10.8數(shù)值計(jì)算10.9小結(jié)容器類(lèi):<vector>,<list>,<deque>,<queue>, <stack>,<map>,<set>,<bitset> 算法:<algorithm>迭代器:<iterator>串:<string>診斷:<exception>通用功能:<utility>,<functional>,<memory>,<ctime>輸入/輸出:<iosfwd>,<ios>,<iostream>,<istream>, <ostream>,<sstream>,<fstream>數(shù)值運(yùn)算:<complex>,<valarray>,<numeric>,<cmath>語(yǔ)言支持:<new>,<ctime>第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織稱(chēng)為標(biāo)準(zhǔn)模板庫(kù)(STL)的部分,定義了常用的數(shù)據(jù)結(jié)構(gòu)(容器container)、泛型算法(genericalgorithm)和迭代器(iterator)等,泛型算法通過(guò)迭代器來(lái)定位和操作容器中的元素。容器部分主要由頭文件<vector>、<list>、<deque>、<set>、<map>、<stack>、<queue>組成,定義了一些常用的容器和容器適配器(基于其它容器實(shí)現(xiàn)的容器)。算法部分主要由頭文件<algorithm>、<numeric>、<functional>組成。提供了大約100個(gè)實(shí)現(xiàn)算法的函數(shù)模版。迭代器部分主要由頭文件<iterator>、<utility>、<memory>組成。第10章C++標(biāo)準(zhǔn)庫(kù)第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織10.2容器10.3string10.4泛型算法10.5迭代器 10.6函數(shù)對(duì)象10.7流類(lèi)10.8數(shù)值計(jì)算10.9小結(jié)容器是以類(lèi)模板的方式定義的常用數(shù)據(jù)結(jié)構(gòu)。vector、list和deque是基本順序容器,stack、queue和priority_queue是在基本順序容器基礎(chǔ)上產(chǎn)生的三個(gè)順序容器適配器,map、multimap、set和multitset是關(guān)聯(lián)容器。一般數(shù)組、string、valarray和bitset中也保存元素,因此也可以看作容器,但不是設(shè)計(jì)完整的標(biāo)準(zhǔn)容器,被稱(chēng)之為近容器。實(shí)際應(yīng)用中應(yīng)根據(jù)自己的需要選取合適的容器類(lèi)型。默認(rèn)情況下選用vector;如果需要任意位置的快速插入或刪除操作,則應(yīng)選用list;如果有大量添加與刪除出現(xiàn)在表的一端或兩端,則應(yīng)該deque、stack或queue;如果主要通過(guò)關(guān)鍵值訪問(wèn)元素,則用map或multimap。第10章C++標(biāo)準(zhǔn)庫(kù)10.2容器10.2.1容器的成員 10.2.2順序容器 10.2.3順序容器適配器 10.2.4關(guān)聯(lián)容器 10.2.5近容器第10章C++標(biāo)準(zhǔn)庫(kù)10.2容器容器定義中封裝了關(guān)于類(lèi)型成員和成員函數(shù)的定義。關(guān)于類(lèi)型成員,每個(gè)容器都以最合適的實(shí)現(xiàn)方式去定義它們。例如,標(biāo)準(zhǔn)容器中都定義了下面的類(lèi)型成員:value_type //元素的類(lèi)型size_type //容器下標(biāo)的類(lèi)型,無(wú)符號(hào)整數(shù)iterator //迭代器,指向容器元素的抽象指針const_iterator //常迭代器reverse_iterator //逆向迭代器const_reverse_iterator //常逆向迭代器關(guān)于成員函數(shù),很多相同功能的操作存在于所有標(biāo)準(zhǔn)容器:第10章C++標(biāo)準(zhǔn)庫(kù)10.2.1容器的成員迭代器操作:begin(),end(),rbegin(),rend()元素訪問(wèn):front(),back(),operator[](i),at(i)棧和隊(duì)列操作:push_back(),pop_back(),push_front(),pop_front()表操作:insert(),erase()賦值運(yùn)算:operator=(),assign()構(gòu)造函數(shù)與析構(gòu)函數(shù)其他操作:size(),empty(),max_size(),swap(),判斷比較等第10章C++標(biāo)準(zhǔn)庫(kù)10.2.1容器的成員 10.2.2順序容器
10.2.3順序容器適配器 10.2.4關(guān)聯(lián)容器 10.2.5近容器第10章C++標(biāo)準(zhǔn)庫(kù)10.2容器順序容器中的元素具有相同的數(shù)據(jù)類(lèi)型?;卷樞蛉萜髦饕╲ector、deque和list。vector實(shí)質(zhì)上是安全的、大小可變的數(shù)組,數(shù)組元素在內(nèi)存中連續(xù)存放,支持隨機(jī)訪問(wèn)某個(gè)元素,支持在序列尾快速插入和刪除元素。參見(jiàn)例10-1。第10章C++標(biāo)準(zhǔn)庫(kù)10.2.2順序容器第10章C++標(biāo)準(zhǔn)庫(kù)
運(yùn)行結(jié)果:10
1
20345678910四個(gè)迭代器成員函數(shù)的返回迭代器指向如下圖:第10章C++標(biāo)準(zhǔn)庫(kù)deque(雙端隊(duì)列)與vector功能類(lèi)似,但提供在序列雙端快速插入和刪除元素的功能。list(雙向鏈表)中的大部分成員與vector相同,但list提供雙向迭代操作而不提供隨機(jī)訪問(wèn),也不提供下標(biāo)操作[]、at()、capacity()及reserve()。list特別適用于對(duì)表的操作,特有的操作如元素移動(dòng)splice()、歸并merge()、排序sort()等;還提供針對(duì)第一個(gè)元素的操作(所有容器都提供針對(duì)最后一個(gè)元素的操作)、刪除重復(fù)元素unique()、元素倒序reverse()等。參見(jiàn)例10-2。第10章C++標(biāo)準(zhǔn)庫(kù)10.2.1容器的成員 10.2.2順序容器 10.2.3順序容器適配器
10.2.4關(guān)聯(lián)容器 10.2.5近容器第10章C++標(biāo)準(zhǔn)庫(kù)10.2容器順序容器適配器是通過(guò)修改基本順序容器的接口而定義的類(lèi)模板,目的是為了提供更簡(jiǎn)化、更高效的服務(wù),例如stack(棧)、queue(隊(duì)列)和priority_queue(優(yōu)先隊(duì)列)。容器適配器不提供迭代器操作,只能通過(guò)接口函數(shù)訪問(wèn)元素。聲明適配器對(duì)象時(shí)應(yīng)指明元素的類(lèi)型以及基本順序容器的類(lèi)型。stack默認(rèn)情況下用deque保存元素,也可以指定是vector或list。例如:
stack<int,vector<int>>mystack;10.2.3順序容器適配器第10章C++標(biāo)準(zhǔn)庫(kù)stack是后進(jìn)先出表,只能在棧頂插入和刪除元素。其基本成員操作函數(shù)包括:push(),pop(),top(),empty(),size()。參見(jiàn)例10-3。queue和priority_queue在頭文件<queue>中定義。queue默認(rèn)情況下用deque保存元素,也可以是list。queue(隊(duì)列)是先進(jìn)先出表,只能在隊(duì)頭刪除元素,在隊(duì)尾插入元素。成員操作函數(shù)包括:push(),pop(),front(),back(),empty(),size()。參見(jiàn)例10-4,可以看出queue與stack彈出元素順序的不同。priority_queue默認(rèn)情況下用vector保存元素。priority_queue優(yōu)先權(quán)與元素的值成正比,top()返回優(yōu)先權(quán)最高的元素,pop()刪除優(yōu)先權(quán)最高的元素,push()插入新元素。參見(jiàn)例10-5。第10章C++標(biāo)準(zhǔn)庫(kù)第10章C++標(biāo)準(zhǔn)庫(kù)運(yùn)行結(jié)果:YoulikeC++.IlikeC++also.10.2.1容器的成員 10.2.2順序容器 10.2.3順序容器適配器 10.2.4關(guān)聯(lián)容器
10.2.5近容器第10章C++標(biāo)準(zhǔn)庫(kù)10.2容器10.2.4關(guān)聯(lián)容器第10章C++標(biāo)準(zhǔn)庫(kù)關(guān)聯(lián)容器提供映射和集合的表示與操作,主要包括map、multimap、set、multiset。map是保存“關(guān)鍵值-值”對(duì)的序列,元素按關(guān)鍵值的字典順序排序??筛鶕?jù)關(guān)鍵值快速查到其對(duì)應(yīng)值,因此map就像下標(biāo)不必為整數(shù)的數(shù)組。參見(jiàn)例10-6。multimap與map功能類(lèi)似,主要不同是multimap允許有重復(fù)的值。參見(jiàn)例10-7。set和multiset是集合容器類(lèi)型,與數(shù)學(xué)中的集合概念是一致的。set中的元素不允許重復(fù),multiset中的元素可以重復(fù)。參見(jiàn)例10-8。第10章C++標(biāo)準(zhǔn)庫(kù)10.2.1容器的成員 10.2.2順序容器 10.2.3順序容器適配器 10.2.4關(guān)聯(lián)容器 10.2.5近容器第10章C++標(biāo)準(zhǔn)庫(kù)10.2容器10.2.5近容器一般數(shù)組、string、valarray、bitset也可以看做容器,因?yàn)樗鼈円材鼙4嬖?。?0章C++標(biāo)準(zhǔn)庫(kù)一般數(shù)組。提供了下標(biāo)運(yùn)算,并且以一般指針的形式提供對(duì)元素的隨機(jī)訪問(wèn)。但是數(shù)組不知道自己的大小,也不提供標(biāo)準(zhǔn)成員操作和成員類(lèi)型。串類(lèi)string。string提供下標(biāo)操作、隨機(jī)訪問(wèn)迭代以及容器的其他操作。但是string不像容器那樣支持廣泛的類(lèi)型選擇,它特別為字符串的使用做了優(yōu)化設(shè)計(jì)。數(shù)值向量valarray。valarray是為數(shù)值計(jì)算而優(yōu)化了的向量。提供許多有用的數(shù)值操作。位集合類(lèi)模板bitset。雖然C++可以通過(guò)整數(shù)上的按位運(yùn)算(與、或、異或、移位等)來(lái)設(shè)置或測(cè)試二進(jìn)制位,但實(shí)現(xiàn)起來(lái)比較復(fù)雜。利用bitset會(huì)方便很多,使用時(shí)應(yīng)包含頭文件<bitset>。例如:bitset<32>bitvec;//聲明含32個(gè)位的bitset對(duì)象 bitvec[27]=1;//或bitvec.set(27);將27位置1除了邏輯運(yùn)算外,bitset還提供很多進(jìn)行單個(gè)位或所有位的操作。第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織10.2容器10.3string10.4泛型算法10.5迭代器 10.6函數(shù)對(duì)象10.7流類(lèi)10.8數(shù)值計(jì)算10.9小結(jié)string類(lèi)封裝了字符串的基本特性和對(duì)字符串的各種操作。string對(duì)象無(wú)終止符‘\0’。泛型算法同樣適用于string類(lèi)型。例如假設(shè)s是一個(gè)string對(duì)象,可以調(diào)用泛型函數(shù)find()進(jìn)行查找操作:strings=“break”;char*cp=find(s.begin(),s.end(),‘a(chǎn)’);//查找字符a泛型算法傾向于假設(shè)容器的元素之間是獨(dú)立的,而“串”則意味著元素排列是有意義的,因此string的成員函數(shù)更適用于字符串操作。第10章C++標(biāo)準(zhǔn)庫(kù)10.3string第10章C++標(biāo)準(zhǔn)庫(kù)第10章C++標(biāo)準(zhǔn)庫(kù)運(yùn)行結(jié)果:Zhanglikesredpets.s1=s[2]第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織10.2容器10.3string10.4泛型算法10.5迭代器 10.6函數(shù)對(duì)象10.7流類(lèi)10.8數(shù)值計(jì)算10.9小結(jié)C++標(biāo)準(zhǔn)庫(kù)中定義了100種左右的算法,大都是以函數(shù)模板的形式定義的,主要用來(lái)操作容器的元素。之所以稱(chēng)這些函數(shù)為泛型算法,是因?yàn)樗麄冞m用于不同的容器類(lèi)型。大部分標(biāo)準(zhǔn)算法在頭文件<algorithm>中定義,有4個(gè)數(shù)值算法在頭文件<numeric>中定義,使用時(shí)要包含相應(yīng)的頭文件。算法名稱(chēng)及功能見(jiàn)書(shū)中。所有泛型算法的前兩個(gè)實(shí)參都是迭代器類(lèi)型(可以理解為指向元素的指針),通常稱(chēng)為first和last,它們確定了要處理的元素的范圍。參見(jiàn)例10-10。第10章C++標(biāo)準(zhǔn)庫(kù)10.4泛型算法第10章C++標(biāo)準(zhǔn)庫(kù)運(yùn)行結(jié)果:01203456789第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織10.2容器10.3string10.4泛型算法10.5迭代器
10.6函數(shù)對(duì)象10.7流類(lèi)10.8數(shù)值計(jì)算10.9小結(jié)僅依靠容器的成員函數(shù)還不能靈活地訪問(wèn)容器的元素。迭代器也是一種數(shù)據(jù)類(lèi)型(模板類(lèi))。迭代器對(duì)象的功能與指針類(lèi)似,但是指向容器對(duì)象的元素,而不是保存一個(gè)內(nèi)存地址。STL中的泛型算法需要通過(guò)迭代器遍歷容器內(nèi)元素,而不用關(guān)心元素的類(lèi)型。C++庫(kù)中的迭代器類(lèi)主要在頭文件<iterator>、<utility>和<memory>中定義。由于<algorithm>中包含了<iterator>,<iterator>及容器頭文件中包含了<utility>,因此程序中有時(shí)不顯式包含頭文件<iterator>也可以使用迭代器。注意容器內(nèi)部一般也定義有自己的成員迭代器類(lèi)型。第10章C++標(biāo)準(zhǔn)庫(kù)10.5迭代器根據(jù)操作功能,可以將迭代器分為5種基本類(lèi)型:輸入迭代器,輸出迭代器,前向迭代器,雙向迭代器,隨機(jī)訪問(wèn)迭代器。輸入迭代器,從容器中順向讀取數(shù)據(jù),每次只能向前移動(dòng)一步,而且只能讀一次。如istream_iterator專(zhuān)門(mén)用于讀入流。輸出迭代器,向容器中順向?qū)懭霐?shù)據(jù),每次只能向前移動(dòng)一步,而且只能寫(xiě)一次。如ostream_iterator專(zhuān)門(mén)用于寫(xiě)到流。前向迭代器,同時(shí)具有輸入迭代器和輸出迭代器的能力,可以讀/寫(xiě)多次。雙向迭代器,在兩個(gè)方向上都可以遍歷數(shù)據(jù)。list、set/multiset、map/multimap的迭代器屬于這一類(lèi)。隨機(jī)訪問(wèn)迭代器。vector、deque、string的迭代器屬于這一類(lèi)。第10章C++標(biāo)準(zhǔn)庫(kù)一個(gè)指針也可以看作一種迭代器。參見(jiàn)例10-11。兩個(gè)典型的容器類(lèi)成員函數(shù)是begin()和end(),表示整個(gè)容器的范圍。另外成員函數(shù)rbegin()和rend()提供反向迭代器。參見(jiàn)例10-12。C++標(biāo)準(zhǔn)庫(kù)為迭代器提供3個(gè)輔助函數(shù):advance()、distance()和iter_swap(),功能分別為前進(jìn)或后退若干個(gè)元素、返回迭代器之間的距離、交換迭代器指向的兩元素。這三個(gè)函數(shù)分別在<iterator>、<utility>、<algorithm>中定義。參見(jiàn)例10-13。輸出流迭代器允許算法將序列輸送給輸出流對(duì)象,輸入流迭代器允許算法從輸入流對(duì)象中獲得它的輸入序列。參見(jiàn)例10-14。第10章C++標(biāo)準(zhǔn)庫(kù)第10章C++標(biāo)準(zhǔn)庫(kù)運(yùn)行結(jié)果:Vectorcontainsthevalue:100300第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織10.2容器10.3string10.4泛型算法10.5迭代器 10.6函數(shù)對(duì)象10.7流類(lèi)10.8數(shù)值計(jì)算10.9小結(jié)標(biāo)準(zhǔn)函數(shù)對(duì)象包含在頭文件<functional>中,如multiplies<T>、plus<T>等,主要包括算術(shù)運(yùn)算、關(guān)系運(yùn)算和邏輯運(yùn)算,參見(jiàn)表10-1。普通函數(shù)、重載了調(diào)用運(yùn)算符的類(lèi)對(duì)象、標(biāo)準(zhǔn)函數(shù)對(duì)象,都可以作為參數(shù)傳遞給泛型算法(參見(jiàn)例10-15)。綜合使用泛型算法、迭代器、容器、函數(shù)對(duì)象的實(shí)例,參見(jiàn)例10-16、例10-17、例10-18。第10章C++標(biāo)準(zhǔn)庫(kù)10.6函數(shù)對(duì)象第10章C++標(biāo)準(zhǔn)庫(kù)運(yùn)行結(jié)果:16240240240第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織10.2容器10.3string10.4泛型算法10.5迭代器 10.6函數(shù)對(duì)象10.7流類(lèi)10.8數(shù)值計(jì)算10.9小結(jié)第10章C++標(biāo)準(zhǔn)庫(kù)10.7流類(lèi)C++語(yǔ)言沒(méi)有輸入/輸出語(yǔ)句,但為我們提供了流類(lèi)庫(kù)。通過(guò)流對(duì)象就可以實(shí)現(xiàn)內(nèi)存與外存、內(nèi)存與輸入/輸出設(shè)備之間的交互。C++流類(lèi)庫(kù)是通過(guò)多重繼承與虛繼承實(shí)現(xiàn)的模板類(lèi)層次結(jié)構(gòu)。輸出流類(lèi)ostream定義了使數(shù)據(jù)從內(nèi)存流出的有關(guān)操作,輸入流類(lèi)istream定義了使數(shù)據(jù)流入內(nèi)存的有關(guān)操作,iostream綜合了二者的功能。文件輸入輸出流類(lèi)fstream和串輸入輸出流類(lèi)stringstream是iostream的兩個(gè)派生類(lèi)。頭文件<iostream>中聲明了8個(gè)預(yù)定義的流對(duì)象,用于完成在標(biāo)準(zhǔn)設(shè)備上的輸入/輸出操作:cin、cout、cerr、clog、wcin、wcout、wcerr、wclog,這里我們只關(guān)心前面2個(gè)對(duì)象。第10章C++標(biāo)準(zhǔn)庫(kù)10.7.1標(biāo)準(zhǔn)流
10.7.2文件流 10.7.3串流 10.7.4重載提取運(yùn)算符和插入運(yùn)算符 10.7.5輸入/輸出成員函數(shù) 10.7.6輸入/輸出格式控制第10章C++標(biāo)準(zhǔn)庫(kù)10.7流類(lèi)標(biāo)準(zhǔn)流是C++標(biāo)準(zhǔn)流庫(kù)中預(yù)定義的對(duì)象,內(nèi)存通過(guò)標(biāo)準(zhǔn)流對(duì)象與標(biāo)準(zhǔn)外設(shè)(如鍵盤(pán)、顯示器)建立聯(lián)系。標(biāo)準(zhǔn)流對(duì)象在頭文件<iostream>中聲明。標(biāo)準(zhǔn)輸入流cin是istream類(lèi)的一個(gè)對(duì)象,通常連向鍵盤(pán),也可以重定向。istream類(lèi)中重載了提取運(yùn)算符“>>”。對(duì)于基本數(shù)據(jù)類(lèi)型可以直接使用“cin>>”,也就是調(diào)用成員函數(shù)cin.operator>>()。標(biāo)準(zhǔn)輸出流cout是ostream類(lèi)的一個(gè)對(duì)象,通常連向顯示器,也可以重定向。ostream類(lèi)中重載了插入運(yùn)算符“<<”。對(duì)于基本數(shù)據(jù)類(lèi)型可以直接使用“cout<<”,也就是調(diào)用成員函數(shù)cout.operator<<()。第10章C++標(biāo)準(zhǔn)庫(kù)10.7.1標(biāo)準(zhǔn)流
10.7.1標(biāo)準(zhǔn)流 10.7.2文件流
10.7.3串流 10.7.4重載提取運(yùn)算符和插入運(yùn)算符 10.7.5輸入/輸出成員函數(shù) 10.7.6輸入/輸出格式控制第10章C++標(biāo)準(zhǔn)庫(kù)10.7流類(lèi)文件流在內(nèi)存對(duì)象與文件之間建立聯(lián)系。三個(gè)文件流類(lèi)ifstream、ofstream、fstream在頭文件<fstream>中定義。其中都定義了open()成員函數(shù)和close()成員函數(shù)。打開(kāi)文件時(shí)要通過(guò)構(gòu)造函數(shù)或者成員函數(shù)open()把流對(duì)象與磁盤(pán)文件關(guān)聯(lián)起來(lái)。fstreamfobject(“d:\\mydata.dat”,ios_base::in|ios_base::out);或者fstreamfobject; //建立文件流對(duì)象fobjectfobject.open(“d:\\mydata.dat”, ios_base::in|ios_base::out);關(guān)閉文件的形式為:fobject.close();
第10章C++標(biāo)準(zhǔn)庫(kù)10.7.2文件流
第10章C++標(biāo)準(zhǔn)庫(kù)運(yùn)行結(jié)果:9.510.7.1標(biāo)準(zhǔn)流 10.7.2文件流 10.7.3串流 10.7.4重載提取運(yùn)算符和插入運(yùn)算符 10.7.5輸入/輸出成員函數(shù) 10.7.6輸入/輸出格式控制第10章C++標(biāo)準(zhǔn)庫(kù)10.7流類(lèi)標(biāo)準(zhǔn)流對(duì)象在內(nèi)存對(duì)象與標(biāo)準(zhǔn)外設(shè)之間建立聯(lián)系,文件流對(duì)象在內(nèi)存對(duì)象與磁盤(pán)文件之間建立聯(lián)系。如果數(shù)據(jù)在內(nèi)存對(duì)象之間流動(dòng),這時(shí)使用賦值運(yùn)算是最有效的。但當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行格式化處理時(shí),使用賦值運(yùn)算就不方便了,這時(shí)可以利用串流。幾個(gè)串流類(lèi)(輸入串流類(lèi)istringstream、輸出串流類(lèi)ostringstream、串流類(lèi)stringstream)在頭文件<sstream>中定義。參見(jiàn)例10-20。第10章C++標(biāo)準(zhǔn)庫(kù)10.7.3串流
第10章C++標(biāo)準(zhǔn)庫(kù)運(yùn)行結(jié)果:Inputdata8.5Inputdata8.52*3=610.7.1標(biāo)準(zhǔn)流 10.7.2文件流 10.7.3串流 10.7.4重載提取運(yùn)算符和插入運(yùn)算符 10.7.5輸入/輸出成員函數(shù) 10.7.6輸入/輸出格式控制第10章C++標(biāo)準(zhǔn)庫(kù)10.7流類(lèi)提取運(yùn)算符(>>)和插入運(yùn)算符(<<),可以實(shí)現(xiàn)從流對(duì)象提取和向流對(duì)象插入基本類(lèi)型數(shù)據(jù)的功能,但不能提取和插入類(lèi)類(lèi)型的對(duì)象。如果希望能夠提取和插入類(lèi)類(lèi)型的對(duì)象,就像我們使用基本類(lèi)型數(shù)據(jù)一樣,就需要在定義類(lèi)時(shí)重載這兩個(gè)運(yùn)算符。參見(jiàn)例10-21。要求:設(shè)計(jì)由年月日構(gòu)成的Date類(lèi),并實(shí)現(xiàn)從鍵盤(pán)讀入Date類(lèi)型數(shù)據(jù)、向顯示器輸出Date類(lèi)型數(shù)據(jù)的功能。第10章C++標(biāo)準(zhǔn)庫(kù)10.7.4重載提取運(yùn)算符和插入運(yùn)算符
第10章C++標(biāo)準(zhǔn)庫(kù)運(yùn)行結(jié)果:請(qǐng)輸入年月日的數(shù)值,如20021215:200855(從鍵盤(pán)輸入)20085510.7.1標(biāo)準(zhǔn)流 10.7.2文件流 10.7.3串流 10.7.4重載提取運(yùn)算符和插入運(yùn)算符 10.7.5輸入/輸出成員函數(shù) 10.7.6輸入/輸出格式控制第10章C++標(biāo)準(zhǔn)庫(kù)10.7流類(lèi)除了提取運(yùn)算符和插入運(yùn)算符,流類(lèi)中還定義了其他輸入/輸出成員函數(shù)。參見(jiàn)例10-22、例10-23。istream中的成員函數(shù):get(),從輸入流對(duì)象中提取一個(gè)或多個(gè)字符;getline(),從輸入流對(duì)象中提取多個(gè)字符;read(),通過(guò)輸入流對(duì)象從文件中讀取n個(gè)二進(jìn)制字節(jié);seekg(),移動(dòng)輸入流指針等。ostream中的成員函數(shù):put(),把一個(gè)字符寫(xiě)到輸出流對(duì)象中;write(),通過(guò)輸出流對(duì)象把n個(gè)二進(jìn)制字節(jié)寫(xiě)入文件;seekp(),移動(dòng)輸出流指針等。ios_base中的3個(gè)枚舉常量:文件首ios_base::beg,當(dāng)前位置ios_base::cur,尾部ios_base::end。第10章C++標(biāo)準(zhǔn)庫(kù)10.7.5輸入/輸出成員函數(shù)
10.7.1標(biāo)準(zhǔn)流 10.7.2文件流 10.7.3串流 10.7.4重載提取運(yùn)算符和插入運(yùn)算符 10.7.5輸入/輸出成員函數(shù) 10.7.6輸入/輸出格式控制第10章C++標(biāo)準(zhǔn)庫(kù)10.7流類(lèi)格式控制常量與標(biāo)志字設(shè)置函數(shù)在類(lèi)ios_base中聲明了一個(gè)記錄當(dāng)前流格式的標(biāo)志字?jǐn)?shù)據(jù)成員,標(biāo)志字的每一位記錄一種格式,為了便于記憶每種格式對(duì)應(yīng)一個(gè)枚舉常量。還定義了能夠直接設(shè)置格式標(biāo)志字的成員函數(shù)。格式設(shè)置函數(shù)與格式控制常量的應(yīng)用參見(jiàn)例10-24。第10章C++標(biāo)準(zhǔn)庫(kù)10.7.6輸入/輸出格式控制
為了控制輸入/輸出的格式,C++標(biāo)準(zhǔn)庫(kù)為我們預(yù)定義了格式控制常量、設(shè)置格式標(biāo)志字的函數(shù),以及格式控制符。格式控制符標(biāo)準(zhǔn)庫(kù)中的一些模板函數(shù),可作為提取和插入運(yùn)算符函數(shù)的右操作數(shù),實(shí)現(xiàn)格式控制,稱(chēng)為控制符。在類(lèi)ios中定義的格式控制符,名稱(chēng)與前面基類(lèi)ios_base中的格式控制常量相同,作用也相同。頭文件<iomanip>中也聲明了幾個(gè)控制格式的模板函數(shù),使用時(shí)作為提取或插入運(yùn)算符函數(shù)的右操作數(shù)。 setbase(intb),
設(shè)置進(jìn)制基數(shù)b setfill(charc),
設(shè)置填充符c setprecision(intn),
設(shè)置浮點(diǎn)數(shù)精度為n setw(w),設(shè)置輸出寬度為w個(gè)字符
第10章C++標(biāo)準(zhǔn)庫(kù)第10章C++標(biāo)準(zhǔn)庫(kù)10.1標(biāo)準(zhǔn)庫(kù)組織10.2容器10.3string10.4泛型算法10.5迭代器 10.6函數(shù)對(duì)象10.7流類(lèi)10.8數(shù)值計(jì)算10.9小結(jié)10.8.1數(shù)學(xué)函數(shù)
10.8.2向量計(jì)算 10.8.3復(fù)數(shù)計(jì)算 10.8.4泛型數(shù)值算法 10.8.5隨機(jī)數(shù)產(chǎn)生第10章C++標(biāo)準(zhǔn)庫(kù)10.8數(shù)值計(jì)算常用的數(shù)學(xué)函數(shù)在頭文件<cmath>中定義,參見(jiàn)表10-2。應(yīng)用舉例:doubled1,d2
;d1=modf(2.8,&d2)
;//小數(shù)0.8賦給d1,整數(shù)2存入d2inta,b;d1=frexp(-5.2,&a)
;//-5.2=-0.65*23a=div(7,3).quot
; //商b=div(7,3).rem; //余數(shù)第10章C++標(biāo)準(zhǔn)庫(kù)10.8.1數(shù)學(xué)函數(shù)
10.8.1數(shù)學(xué)函數(shù) 10.8.2向量計(jì)算 10.8.3復(fù)數(shù)計(jì)算 10.8.4泛型數(shù)值算法 10.8.5隨機(jī)數(shù)產(chǎn)生第10章C++標(biāo)準(zhǔn)庫(kù)10.8數(shù)值計(jì)算頭文件<valarray>中定義了類(lèi)型valarray、slice等,并重載了一些二元運(yùn)算符和常用的數(shù)學(xué)函數(shù)。valarray與數(shù)學(xué)意義上的向量類(lèi)似,能夠進(jìn)行類(lèi)似向量的各種數(shù)學(xué)運(yùn)算??梢杂脭?shù)組或單個(gè)的值為valarray對(duì)象初始化。例如:constdoublev[]={0,1,2,3,4}
; //含5個(gè)元素的數(shù)組valarray<int>v1(-1,10)
;//含10個(gè)元素的向量v1,初值為-1valarray<float>v2(10)
;//含10個(gè)元素的向量v2valarray<double>v3(v,4)
;//含4個(gè)元素,用v初始化valarray<double>v4=v3
;//v4具有v3.size()個(gè)元素第10章C++標(biāo)準(zhǔn)庫(kù)10.8.2向量計(jì)算
作為成員函數(shù),valarray重載了下標(biāo)[]、~、
!、取正、取負(fù)及賦值系列運(yùn)算符。一個(gè)valarray對(duì)象可以賦值給另一個(gè)同樣大小的valarray對(duì)象;也可以將一個(gè)標(biāo)量賦給valarray對(duì)象,如“v1=7
;”的作用是將7賦給v1的所有元素。其他與標(biāo)量的運(yùn)算也有類(lèi)似的效果,即將一個(gè)標(biāo)量作用于一個(gè)向量,意味著作用于向量的每個(gè)元素。注意,頭文件中沒(méi)有定義用于輸入/輸出的運(yùn)算符“>>”和“<<”,而其中的“>>”和“<<”是進(jìn)行二進(jìn)制移位的位運(yùn)算符。其他成員函數(shù)見(jiàn)書(shū)中。valarray的操作一般不改變?cè)瓉?lái)對(duì)象的值。slice主要與valarray配合使用,作用是從valarray中以一定間隔提取部分元素,構(gòu)成新的一組數(shù)據(jù)(子數(shù)組),這種方法要比使用循環(huán)語(yǔ)句簡(jiǎn)單。第10章C++標(biāo)準(zhǔn)庫(kù)第10章C++標(biāo)準(zhǔn)庫(kù)10.8.1數(shù)學(xué)函數(shù) 10.8.2向量計(jì)算 10.8.3復(fù)數(shù)計(jì)算
10.8.4泛型數(shù)值算法 10.8.5隨機(jī)數(shù)產(chǎn)生第10章C++標(biāo)準(zhǔn)庫(kù)10.8數(shù)值計(jì)算使用復(fù)數(shù)類(lèi)complex時(shí)需要包含頭文件<complex>。其中重載了運(yùn)算符如+、-、*、/、==、!=、取正、取負(fù)、提取與插入等,以及常用的數(shù)學(xué)函數(shù)sin()、cos()、tan()、sinh()、cosh()、tanh()、sqrt()、exp()、log()、log10()、pow()等。定義了如下函數(shù):Treal(constcomplex<T>&); //求實(shí)部Timag(const
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級(jí)數(shù)學(xué)教學(xué)計(jì)劃3篇
- 甘肅省天水市2024-2025學(xué)年高三上學(xué)期九校聯(lián)考語(yǔ)文試題
- 自考《勞動(dòng)法(00167)》近年考試真題題庫(kù)(含答案)
- 2025年江蘇職教高考《職業(yè)適應(yīng)性測(cè)試》考前沖刺模擬試題庫(kù)(附答案)
- 《個(gè)人信息保護(hù)法》考試參考試題庫(kù)100題(含答案)
- 2025年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年武漢職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年榆林能源科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年新疆職業(yè)大學(xué)高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 專(zhuān)題07 解二元一次方程組 帶解析
- 2025-2030年中國(guó)硫酸鉀行業(yè)深度調(diào)研及投資戰(zhàn)略研究報(bào)告
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院2025年工作計(jì)劃
- 2024年山東省泰安市初中學(xué)業(yè)水平生物試題含答案
- 機(jī)械工程類(lèi)基礎(chǔ)知識(shí)單選題100道及答案解析
- 冠心病課件完整版本
- 微生物組與膽汁性肝硬化
- 帶式輸送機(jī)滾筒出廠檢驗(yàn)規(guī)范
- 《信息檢索基礎(chǔ)知識(shí)》課件
- 具有履行合同所必須的設(shè)備和專(zhuān)業(yè)技術(shù)能力的承諾函-設(shè)備和專(zhuān)業(yè)技術(shù)能力承諾
- 1325木工雕刻機(jī)操作系統(tǒng)說(shuō)明書(shū)
- 初中衡水體英語(yǔ)(28篇)
評(píng)論
0/150
提交評(píng)論