面向對象程序設計(C++):第十章 C++ 標準模板庫_第1頁
面向對象程序設計(C++):第十章 C++ 標準模板庫_第2頁
面向對象程序設計(C++):第十章 C++ 標準模板庫_第3頁
面向對象程序設計(C++):第十章 C++ 標準模板庫_第4頁
面向對象程序設計(C++):第十章 C++ 標準模板庫_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第十章C++標準模板庫1主要內容泛型程序設計與標準模板庫有關的概念和術語C++標準模板庫中的容器迭代器標準C++庫中的算法10.1泛型程序設計1、泛型程序特征將程序寫得盡可能通用

將算法從特定的數據結構中抽象出來,成為通用的C++的模板為泛型程序設計奠定了關鍵的基礎

10.1泛型程序設計2、STL是泛型程序設計的一個范例STL內容包括:

容器(container)迭代器(iterator)算法(algorithms)3、命名空間(Namespace)(1)功能:將不同的標識符集合在一個命名作用域(namedscope)內,為了解決命名沖突;(2)無名空間

沒有聲明命名空間的標識符都處于無名的命名空間中。10.1泛型程序設計3、命名空間(Namespace)(2)命名空間語法格式:namespaceNS{classFile;//類名voidFun();//函數或變量}

則引用標識符的方式如下,NS::Fileobj;NS::Fun();10.1泛型程序設計3、命名空間(namespace)(4)命名空間使用:用using來指定命名空間。

語法格式usingnamespace空間名10.1泛型程序設計3、命名空間(Namespace)

使用案例:usingnamespaceNS;

在當前作用域中就可以直接引用File。注:在新的C++標準程序庫中,所有標識符都聲明在命名空間std中,頭文件都不使用擴展名10.1泛型程序設計10.2容器(類模板)1、定義

容器類是容納、包含一組元素或元素集合的對象。10.2容器(類模板)2、容器類型向量(vector)、雙端隊列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)3、容器的接口(運算符和函數)(1)通用容器運算符==、!=、>、>=、<、<=、=10.2容器(類模板)3、容器的接口(運算符和函數)(2)方法(函數)迭代方法begin(),end(),rbegin(),rend()訪問方法size(),max_size(),swap(),empty()10.2容器(類模板)10.3適配器(是容器的繼承與派生類)1、適配器是一種接口類為已有的類提供新的接口。3、適配器類型容器適配器迭代器適配器10.4迭代器1、定義

迭代器是面向對象版本的指針,它們提供了訪問容器、序列中每個元素的方法。2、功能用戶可以使用迭代器定義指向容器中元素指針,通過該指針訪問容器中的數據。10.5算法1、C++標準模板庫中包括70多個算法包括查找、排序等等。2、特征:

可以用于不同的對象和內置的數據類型。10.6順序容器1、接口成員函數(1)插入方法push_front()、push_back()、insert()、運算符“=”(2)刪除方法pop()、erase()、clear()10.6順序容器1、接口成員函數(3)迭代訪問方法使用迭代器(4)其它順序容器訪問方法front(),back(),下標[]運算符10.6.1、順序容器—向量1、功能:用于容納不定長線性序列,提供對序列的快速隨機訪問2、特點:向量是動態(tài)結構,它的大小不固定,可以在程序運行時增加或減少。10.6.1、順序容器—向量例10-1求范圍2~N中的質數,N在程序運行時由鍵盤輸入。//10_1.cpp#include<iostream>#include<iomanip>#include<vector> //包含向量容器頭文件usingnamespacestd;intmain(){

vector<int>A(10); intn; intprimecount=0,i,j;cout<<"Enteravalue>=2asupperlimit:";cin>>n;A[primecount++]=2;

20順序容器——向量for(i=3;i<n;i++){if(primecount==A.size()) A.resize(primecount+10);if(i%2==0)continue;j=3;while(j<=i/2&&i%j!=0)j+=2;if(j>i/2)A[primecount++]=i;}for(i=0;i<primecount;i++)//輸出質數

{cout<<setw(5)<<A[i];if((i+1)%10==0)//每輸出10個數換行一次

cout<<endl;}cout<<endl;}21順序容器——向量10.6.2順序容器—雙端隊列1、特點

雙端隊列是一種放松了訪問權限的隊列。元素可以從隊列的兩端入隊和出隊,也支持通過下標操作符“[]”進行直接訪問。例10-2使用雙端隊列容器保存雙精度數值序列。10.6.3順序容器——列表1、特點:用于存放雙向鏈表,可以從任意一端開始遍歷。10.6.3、順序容器——列表例10.3從鍵盤輸入10個整數,用這些整數值作為結點數據,生成一個鏈表,按順序輸出鏈表中結點的數值。然后從鍵盤輸入一個待查找整數,在鏈表中查找該整數,若找到則刪除該整數所在的結點(如果出現多次,全部刪除),然后輸出刪除結點以后的鏈表。在程序結束之前清空鏈表。2510.6.3、順序容器—列表10.7容器適配器1、功能:用來擴展基本容器。2、類型(1)棧容器例10-4:應用標準庫中的deque順序容器生成一個整數棧stack。10.7容器適配器1、功能:用來擴展基本容器。2、類型(2)隊列容器例10-5:應用標準庫中的deque順序容器生成一個整數標準隊列Queue。10.8迭代器1、定義

迭代器是面向對象版本的指針2、功能使用迭代器,算法函數可以訪問容器中指定位置的元素。3、迭代器的類型輸入迭代器用來從序列中讀取數據輸出迭代器向序列中寫入數據前向迭代器用來從序列中讀取與寫入數據,單向的。10.8迭代器3、迭代器的類型雙向迭代器可讀寫數據,在兩個方向上都可以對數據遍歷隨機訪問迭代器也是雙向迭代器,但能夠在序列中的任意兩個位置之間進行跳轉。10.8迭代器10.9迭代器適配器1、定義

迭代器適配器是迭代器的派生類。2、類型(1)逆向迭代器通過重新定義遞增運算和遞減運算,使其行為正好倒置2、類型(2)插入型迭代器將賦值操作轉換為插入操作,算法可以執(zhí)行插入行為而不是覆蓋行為例10-6應用逆向迭代器和后插迭代器來操作向量容器中的元素10.9迭代器適配器10.10迭代器相關的輔助函數advance()函數將迭代器的位置增加,增加的幅度由參數決定Distance()函數返回迭代器之間的距離函數iter_swap()交換兩個迭代器所指向的元素值10.10迭代器相關的輔助函數例10-7用三個迭代器輔助函數來操作列表容器中的元素。10.11標準C++庫中的算法1、STL算法特征是一種函數模板10.11標準C++庫中的算法2、算法類型不可變序列算法不直接修改所操作的容器內容的算法可變序列算法可以修改它們所操作的容器的元素。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論