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

C++必知必會(四) STL

編輯:關於C++

對STL(Standard Template Library)的簡短描述並不足以體現其設計上的過人之處,接下來的文字不過是鼓勵你深入學習STL的“開胃小菜”。

STL並不僅僅是一個庫,它更是一種優秀的思想以及一套約定。 STL包含三大組件:容器、算法和迭代器。容器用於容納和組織元素;算法執行操作;迭代器則用於訪問容器中的元素。這些都不是什麼新東西,許多傳統的程序庫也都包含類似的組件,並且許多程序也都是采用模板實現而成。

STL的優秀思想在於:容器與容器上執行的算法之間無需彼此了解,這種戲法是通過迭代器實現的。 迭代器類似於指針(實際上指針就是一種STL迭代器)。像指針一樣,迭代器可以指向序列中的一個元素,也可以對其進行解引用,以便獲得它所指向的對象的值。我們可以像操縱指針那樣操縱迭代器,使其指向序列中不同的元素。

STL迭代器既可以是預定義的指針,也可以是用戶自定義的類類型,當然,這種類型需要重載適當的操作符,以便與預定義指針擁有相同的使用語法。

STL容器是對數據結構的一種抽象,以類模板的方式實現而成。由於具有不同的數據結構,因此不同的容器以不同的方式來組織元素,以便對存取或操縱進行優化。STL定義了7個(算上string則是8個)標准容器,另外,一些被廣泛接受的非標准容器也得到了實現。

STL算法是對函數的一種抽象,采用函數模板實現。大多數STL算法用於處理一個或多個序列的值,其中每一個序列由一對有序的迭代器定義。其中第一個迭代器指向序列的第一個元素,第二個迭代器則指向序列最後一個元素之後的那個位置。如果兩個迭代器指向同一個位置,那麼它們就定義了一個空序列。

迭代器提供了一種使容器和算法協同工作的機制。一個容器可以生成一對迭代器來指定一個元素序列(可以是全部元素,也可以只是一個子區間),而算法則對該序列進行操作。采用這種方式,容器和算法可以緊密地協作,同時還可以保持彼此不知情。 除了容器、算法和迭代器之外,STL還定義了大量的輔助性功能。算法和容器可以采用函數指針和函數對象根據需要進行定制,而這些函數對象又可以通過形形色色的對象適配器進行配接和聯合。

容器也可以利用容器適配器進行配接,從而將容器的接口修改為棧、隊列和優先隊列。 STL對約定有著很強的依賴。容器和函數對象必須通過一套標准的嵌套類型名字對其自身進行描述。容器和函數對象適配器均要求成員函數具有特定的名字並包含特定的類型信息。算法要求傳遞給它的迭代器支持特定的操作並能夠識別是什麼樣的操作。當使用或擴展STL時,如果棄約定而不顧,那麼同時也就放棄了美夢成真的希望。遵守約定,將擁有簡單而輕松的生活。

STL約定並未指明具體的實現細節,但對實現指定了效率方面的約束。此外,由於STL是一個模板庫,許多優化和性能調整可以在編譯期進行。前面提到的命名和信息約定對編譯期優化具有顯著的影響。一般而言,STL的效率可以與專家手寫代碼的效率相媲美,而與普通程序員和程序員小組的手寫代碼相比則明顯勝出一籌。另外,使用STL可以使代碼變得更清晰,更易於維護。 學習STL,並廣泛使用STL吧!

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