程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> STL組件之迭代器(1)

STL組件之迭代器(1)

編輯:C++入門知識

STL的一個重要特點是數據結構和算法的分離。盡管這是個簡單的概念,但這種分離確實使得STL變得非常通用。例如,由於STL的sort()函數是完全通用的,你可以用它來操作幾乎任何數據集合,包括鏈表,容器和數組。

要點

STL算法作為模板函數提供。為了和其他組件相區別,在本書中STL算法以後接一對圓括弧的方式表示,例如sort()。

STL 另一個重要特性是它不是面向對象的。為了具有足夠通用性,STL主要依賴於模板而不是封裝,繼承和虛函數多態性)——OOP的三個要素。你在STL中找不到任何明顯的類繼承關系。這好像是一種倒退,但這正好是使得STL的組件具有廣泛通用性的底層特征。另外,由於STL是基於模板,內聯函數的使用使得生成的代碼短小高效。

提示

確保在編譯使用了STL的程序中至少要使用-O優化來保證內聯擴展。

STL組件

STL提供了大量的模板類和函數,可以在OOP和常規編程中使用。所有的STL的大約50個算法都是完全通用的,而且不依賴於任何特定的數據類型。下面的小節說明了三個基本的STL組件:

1)迭代器提供了訪問容器中對象的方法。例如,可以使用一對迭代器指定list或vector中的一定范圍的對象。迭代器就如同一個指針。事實上,C++的指針也是一種迭代器。但是,迭代器也可以是那些定義了operator*()以及其他類似於指針的操作符地方法的類對象。

2)容器是一種數據結構,如list,vector,和deques ,以模板類的方法提供。為了訪問容器中的數據,可以使用由容器類輸出的迭代器。

3)算法是用來操作容器中的數據的模板函數。例如,STL用sort()來對一個vector中的數據進行排序,用find()來搜索一個list中的對象。函數本身與他們操作的數據的結構和類型無關,因此他們可以在從簡單數組到高度復雜容器的任何數據結構上使用。

1、頭文件

為了避免和其他頭文件沖突, STL的頭文件不再使用常規的.h擴展。為了包含標准的string類,迭代器和算法,用下面的指示符:

  1. #include <string>  
  2. #include <iterator>  
  3. #include <algorithm> 

如果你查看STL的頭文件,你可以看到象iterator.h和stl_iterator.h這樣的頭文件。由於這些名字在各種STL實現之間都可能不同,你應該避免使用這些名字來引用這些頭文件。為了確保可移植性,使用相應的沒有.h後綴的文件名。

2、名字空間

你的編譯器可能不能識別名字空間。名字空間就好像一個信封,將標志符封裝在另一個名字中。標志符只在名字空間中存在,因而避免了和其他標志符沖突。例如,可能有其他庫和程序模塊定義了sort()函數,為了避免和STL地sort()算法沖突,STL的sort()以及其他標志符都封裝在名字空間std中。 STL的sort()算法編譯為std::sort(),從而避免了名字沖突。

盡管你的編譯器可能沒有實現名字空間,你仍然可以使用他們。為了使用STL,可以將下面的指示符插入到你的源代碼文件中,典型地是在所有的#include指示符的後面:

  1. using namespace std; 


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