程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++標准模板庫復習

C++標准模板庫復習

編輯:C++入門知識

一、主要內容        泛型程序設計
與標准模板庫有關的概念和術語
C++標准模板庫中的容器
迭代器
標准C++庫中的算法
函數對象
泛型程序設計
將程序寫得盡可能通用
將算法從特定的數據結構中抽象出來,成為通用的
C++的模板為泛型程序設計奠定了關鍵的基礎
二、STL是泛型程序設計的一個范例
容器(container)
迭代器(iterator)
算法(algorithms)
函數對象(function object)
三、命名空間(namespace)
一個命名空間將不同的標識符集合在一個命名作用域(named scope)內
為了解決命名沖突
例如,聲明一個命名空間NS:
namspace NS {
class File;
void Fun ();
}
    則引用標識符的方式如下,
NS:: File obj;
NS:: Fun ();
沒有聲明命名空間的標識符都處於無名的命名空間中

可以用using來指定命名空間
例如,經過以下聲明: using NS::File; 在當前作用域中就可以直接引用File
using namespace std; 命名空間std中所有標識符都可直接引用
在新的C++標准程序庫中,所有標識符都聲明在命名空間std中,頭文件都不使用擴展名
四、容器
容器類是容納、包含一組元素或元素集合的對象。
異類容器類與同類容器類
順序容器與關聯容器
七種基本容器:
向量(vector)、雙端隊列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)

五、容器的接口
通用容器運算符
==,!=,>,>=,<,<=,=
方法(函數)
迭代方法
begin(),end(),rbegin(),rend()
訪問方法
size(),max_size(),swap(),empty()

七、適配器
適配器是一種接口類
為已有的類提供新的接口。
目的是簡化、約束、使之安全、隱藏或者改變被修改類提供的服務集合。
三種類型的適配器:
容器適配器
用來擴展7種基本容器,它們和順序容器相結合構成棧、隊列和優先隊列容器
迭代器適配器
函數對象適配器。
迭代器
迭代器是面向對象版本的指針,它們提供了訪問容器、序列中每個元素的方法。
八、算法
C++標准模板庫中包括70多個算法
其中包括查找算法,排序算法,消除算法,記數算法,比較算法,變換算法,置換算法和容器管理等等。
這些算法的一個最重要的特性就是它們的統一性,並且可以廣泛用於不同的對象和內置的數據類型。
順序容器
順序容器的接口
插入方法
push_front(),push_back(),insert(),運算符“=”
刪除方法
pop() ,erase(),clear()
迭代訪問方法
使用迭代器
其他順序容器訪問方法(不修改訪問方法)
front(),back(),下標[]運算符
順序容器——向量
向量屬於順序容器,用於容納不定長線性序列(即線性群體),提供對序列的快速隨機訪問(也稱直接訪問)
向量是動態結構,它的大小不固定,可以在程序運行時增加或減少。
求范圍2~N中的質數,N在程序運行時由鍵盤輸入。
//.cpp
#include <iostream>
#include <iomanip>
#include <vector> //包含向量容器頭文件
using namespace std ;
int main()
{   
  vector<int>  A(10);
  int n;
  int primecount = 0, i, j;
  cout<<"Enter a value>=2 as upper limit: ";
  cin >> n;
  A[primecount++] = 2;

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

int main()
{
 list<int> Link; //構造一個列表用於存放整數鏈表
 int i, key, item;   
 for(i=0;i < 10;i++)// 輸入10個整數依次向表頭插入
 {
   cin>>item;
   Link.push_front(item);
 }
 cout<<"List: "; // 輸出鏈表

 list<int>::iterator p=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;
}
九、容器適配器
容器適配器是用來擴展7種基本容器的
棧容器
使用適配器與一種基礎容器相結合來實現
應用標准庫中的deque順序容器生成一個整數棧stack。
隊列容器
使用適配器與一種基礎容器相結合來實現的先進先出數據結構。
應用標准庫中的deque順序容器生成一個整數標准隊列queue。
什麼是迭代器
迭代器是面向對象版本的指針
指針可以指向內存中的一個地址
迭代器可以指向容器中的一個位置
STL的每一個容器類模版中,都定義了一組對應的迭代器類。使用迭代器,算法函數可以訪問容器中指定位置的元素,而無需關心元素的具體類型。
迭代器的類型
輸入迭代器
可以用來從序列中讀取數據
輸出迭代器
允許向序列中寫入數據
前向迭代器
既是輸入迭代器又是輸出迭代器,並且可以對序列進行單向的遍歷
雙向迭代器
與前向迭代器相似,但是在兩個方向上都可以對數據遍歷
隨機訪問迭代器
也是雙向迭代器,但能夠在序列中的任意兩個位置之間進行跳轉。
迭代器適配器
迭代器適配器是用來擴展(或調整)迭代器功能的類。它本身也被稱為迭代器,只是這種迭代器是通過改變另一個迭代器而得到的
逆向迭代器
通過重新定義遞增運算和遞減運算,使其行為正好倒置
插入型迭代器
將賦值操作轉換為插入操作。通過這種迭代器,算法可以執行插入行為而不是覆蓋行為
應用逆向迭代器和後插迭代器來操作向量容器中的元素
迭代器相關的輔助函數
advance()函數
將迭代器的位置增加,增加的幅度由參數決定
distance()函數
返回迭代器之間的距離
函數iter_swap()
交換兩個迭代器所指向的元素值
用三個迭代器輔助函數來操作列表容器中的元素。
標准C++庫中的算法
算法本身是一種函數模板
不可變序列算法(non-mutating algorithms)
不直接修改所操作的容器內容的算法
可變序列算法(mutating algorithms)
可以修改它們所操作的容器的元素。
排序相關算法
數值算法
算法應用舉例
應用不可變序列算法對數據序列進行分析
以可變序列算法對數據序列進行復制,生成,刪除,替換,倒序,旋轉等可變性操作。
應用排序相關算法對序列進行各項操作
應用數值算法對數據序列進行操作
函數對象
一個行為類似函數的對象,它可以沒有參數,也可以帶有若干參數,其功能是獲取一個值,或者改變操作的狀態。
任何普通的函數和任何重載了調用運算符operator()的類的對象都滿足函數對象的特征
STL中也定義了一些標准的函數對象,如果以功能劃分,可以分為算術運算、關系運算、邏輯運算三大類。為了調用這些標准函數對象,需要包含頭文件<functional>。
小結與復習建議
主要內容
泛型程序設計、與標准模板庫有關的概念和術語、C++標准模板庫中的容器、迭代器、標准C++庫中的算法、函數對象
達到的目標
初步了解泛型程序設計的概念,學會C++標准模板庫(STL)的使用方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved