C++标准模板库课件_第1页
C++标准模板库课件_第2页
C++标准模板库课件_第3页
C++标准模板库课件_第4页
C++标准模板库课件_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++標準範本庫

2泛型程式設計將程式寫得盡可能通用

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

STL是泛型程式設計的一個範例

容器(container)迭代器(iterator)演算法(algorithms)函數對象(functionobject)3命名空間(namespace)一個命名空間將不同的識別字集合在一個命名作用域(namedscope)內為了解決命名衝突例如,聲明一個命名空間NS:namspaceNS{classFile;voidFun();}

則引用識別字的方式如下,NS::Fileobj;NS::Fun();沒有聲明命名空間的識別字都處於無名的命名空間中概念和術語4命名空間(續)可以用using來指定命名空間例如,經過以下聲明:

usingNS::File;

在當前作用域中就可以直接引用Fileusingnamespacestd;

命名空間std中所有識別字都可直接引用在新的C++標準程式庫中,所有識別字都聲明在命名空間std中,頭檔都不使用擴展名概念和術語5容器容器類是容納、包含一組元素或元素集合的對象。異類容器類與同類容器類順序容器與關聯容器七種基本容器:向量(vector)、雙端佇列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)概念和術語6容器的介面通用容器運算符==,!=,>,>=,<,<=,=方法(函數)迭代方法begin(),end(),rbegin(),rend()訪問方法size(),max_size(),swap(),empty()7適配器適配器是一種介面類為已有的類提供新的介面。目的是簡化、約束、使之安全、隱藏或者改變被修改類提供的服務集合。三種類型的適配器:容器適配器用來擴展7種基本容器,它們和順序容器相結合構成棧、佇列和優先佇列容器迭代器適配器函數對象適配器。概念和術語8迭代器迭代器是面向對象版本的指針,它們提供了訪問容器、序列中每個元素的方法。概念和術語9演算法C++標準範本庫中包括70多個演算法其中包括查找演算法,排序演算法,消除演算法,記數演算法,比較演算法,變換演算法,置換演算法和容器管理等等。這些演算法的一個最重要的特性就是它們的統一性,並且可以廣泛用於不同的對象和內置的數據類型。概念和術語10順序容器順序容器的介面插入方法push_front(),push_back(),insert(),運算符“=”刪除方法pop(),erase(),clear()迭代訪問方法使用迭代器其他順序容器訪問方法(不修改訪問方法)front(),back(),下標[]運算符容器11順序容器——向量向量屬於順序容器,用於容納不定長線性序列(即線性群體),提供對序列的快速隨機訪問(也稱直接訪問)向量是動態結構,它的大小不固定,可以在程式運行時增加或減少。例10-1求範圍2~N中的質數,N在程式運行時由鍵盤輸入。容器12//10_1.cpp#include<iostream>#include<iomanip>#include<vector> //包含向量容器頭檔usingnamespacestd;intmain(){vector<int>A(10);

intn;

int

primecount=0,i,j;

cout<<"Enteravalue>=2asupperlimit:";

cin>>n;

A[primecount++]=2; 1213

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;}1314順序容器——雙端佇列雙端佇列是一種放鬆了訪問許可權的佇列。元素可以從佇列的兩端入隊和出隊,也支持通過下標操作符“[]”進行直接訪問。例10-2使用雙端佇列容器保存double數值序列容器15順序容器——列表列表主要用於存放雙向鏈表,可以從任意一端開始遍曆。列表還提供了拼接(splicing)操作,將一個序列中的元素從插入到另一個序列中。例10-3改寫例9-7從鍵盤輸入10個整數,用這些整數值作為結點數據,生成一個鏈表,按順序輸出鏈表中結點的數值。然後從鍵盤輸入一個待查找整數,在鏈表中查找該整數,若找到則刪除該整數所在的結點(如果出現多次,全部刪除),然後輸出刪除結點以後的鏈表。在程式結束之前清空鏈表。容器16//10_3.cpp#include<iostream>#include<list>usingnamespacestd;intmain(){list<int>Link; //構造一個列表用於存放整數鏈表

inti,key,item;

for(i=0;i<10;i++)//輸入10個整數依次向表頭插入

{

cin>>item;

Link.push_front(item);}

cout<<"List:";//輸出鏈表1617list<int>::iteratorp=Link.begin();

while(p!=Link.end())//輸出各節點數據,直到鏈表尾

{cout<<*p<<"";p++;//使P指向下一個節點

}

cout<<endl;

cout<<"請輸入一個需要刪除的整數:";

cin>>key;

Link.remove(key);

cout<<"List:";//輸出鏈表

p=Link.begin(); //使P重新指向表頭

while(p!=Link.end()) {cout<<*p<<"";p++;//使P指向下一個節點

}

cout<<endl;}1718容器適配器容器適配器是用來擴展7種基本容器的棧容器使用適配器與一種基礎容器相結合來實現例10-4:應用標準庫中的deque順序容器生成一個整數棧stack。佇列容器使用適配器與一種基礎容器相結合來實現的先進先出數據結構。例10-5:應用標準庫中的deque順序容器生成一個整數標準佇列queue。容器19什麼是迭代器迭代器是面向對象版本的指針指針可以指向記憶體中的一個地址迭代器可以指向容器中的一個位置STL的每一個容器類模版中,都定義了一組對應的迭代器類。使用迭代器,演算法函數可以訪問容器中指定位置的元素,而無需關心元素的具體類型。迭代器20迭代器的類型輸入迭代器可以用來從序列中讀取數據輸出迭代器允許向序列中寫入數據前向迭代器既是輸入迭代器又是輸出迭代器,並且可以對序列進行單向的遍曆雙向迭代器與前向迭代器相似,但是在兩個方向上都可以對數據遍曆隨機訪問迭代器也是雙向迭代器,但能夠在序列中的任意兩個位置之間進行跳轉。迭代器21迭代器適配器迭代器適配器是用來擴展(或調整)迭代器功能的類。它本身也被稱為迭代器,只是這種迭代器是通過改變另一個迭代器而得到的逆向迭代器通過重新定義遞增運算和遞減運算,使其行為正好倒置插入型迭代器將賦值操作轉換為插入操作。通過這種迭代器,演算法可以執行插入行為而不是覆蓋行為例10-6應用逆向迭代器和後插迭代器來操作向量容器中的元素迭代器22迭代器相關的輔助函數advance()函數將迭代器的位置增加,增加的幅度由參數決定distance()函數返回迭代器之間的距離函數iter_swap()交換兩個迭代器所指向的元素值例10-7用三個迭代器輔助函數來操作列表容器中的元素。迭代器23標準C++庫中的演算法演算法本身是一種函數範本不可變序列演算法(non-mutatingalgorithms)不直接修改所操作的容器內容的演算法可變序列演算法(mutatingalgorithms)可以修改它們所操作的容器的元素。排序相關演算法數值演算法算法24演算法應用舉例例10-9應用不可變序列演算法對數據序列進行分析例10-10以可變序列演算法對數據序列進行複製,生成,刪除,替換,倒序,旋轉等可變性操作。例10-11應用排序相關演算法對序列進行各項操作例10-12應用數值演算法對數據序列進行操作算法25函數對象一個行為類似函數的對象,它可以沒有參數,也可以帶有若干參數,其功能是獲取一個值,或者改變操作的狀態。任何普通的函數和任何重載了調用運算符operator()的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论