模版庫簡介

2021-06-29 14:00:30 字數 1752 閱讀 4601

stl的**從廣義上講分為3類:algorithm(演算法)、container(容器)和iterator(迭代器),幾乎所有的**都採用了模版類和模版函式的方式。在c++標準中,stl被組織為13個頭檔案:、、、、、、、、、、、、和。本文主要介紹組成構件、基本結果和stl變成概述。

1.容器

容器類是可以包含其他物件的類,就像陣列和佇列堆疊等資料結構包含整數、小數和類等資料成員一樣。stl可以包含常見的向量類、鍊錶類、雙向佇列類、集合類和圖類等。

stl中已經提供的容器主要包含:

vector,是一種向量

list,是乙個雙向鍊錶容器,完成標準c++資料結構中煉表的所有功能。

queue,是一種佇列容器,完成標準c++資料結構中佇列的所有功能。

stack,是一種棧容器,完成標準c++資料結構中棧的所有功能。

deque,是雙端佇列容器,完成標準c++資料結構中棧的所有功能。

priority_queue,是一種按值排序的佇列容器。

set,是一種集合容器。

multiset,是一種允許出現重複元素的集合容器。

map是一種關聯陣列容器。

multimap是一種允許出現重複key值的關聯陣列容器。

以上容器設計高效,還提供了介面。程式設計師可以在任何適當的地方使用它們。

容器可以分為兩大類:序列式容器和關聯式容器。序列式容器主要vector、list和deque;關聯式容器包含set、map、multiset和multimap等容器模版類。

2.演算法

stl提供了非常多的資料結構演算法。這些演算法在命名空間std的範圍內定義,通過包含標頭檔案來獲取使用權。

常見的部分演算法包括:

for_each()

find()

find_if()

count()

count_if()

replace()

replace_if()

copy()

unique_copy()

sort()

equal_range()

merge()

stl所用演算法都是基於模版實現的。

3.迭代器

迭代器技術能夠使程式反覆地對stl容器的內容進行訪問,非常快捷和重要。反覆的訪問意味著一次可以訪問乙個或多個元素。迭代器為訪問容器提供了通用的方法,類似於c++的指標。當引數化型別是c++內部型別時,迭代器即c++指標。stl定義了5種型別的指示器,根據使用方法而命名。每種容器都支援某種類別的迭代器,常見的迭代器類別包括:輸入、輸出、前向、雙向和隨機訪問。

(1)輸入迭代器主要用於為程式中需要的資料來源提供輸入介面,資料來源一般指容器、資料流等。輸入迭代器只能夠從乙個序列中讀取數值,迭代器可以被修改、被引用等。

(2)輸出迭代器主要用於輸出程式中已經得到的資料結構(容器、資料流)。輸出迭代器只能夠向乙個序列寫入資料,輸出迭代器也可以被修改和被引用。

(3)雙向迭代器即可以用來讀又可以用來寫,雙向迭代器和前向迭代器很類似。雙向迭代器可以同時進行前向和後向元素操作。所有的stl容器都提供了雙向迭代器功能,既有利於資料的寫入和讀出,還有利於提供更加靈活的資料操作。有的容器甚至提供了隨機接入迭代器。

(4)隨機接入迭代器可以通過跳躍的方式訪問容器中的任意資料,使資料的訪問更加靈活。隨機訪問迭代器具有雙向迭代器的所有功能,是功能最強大的迭代器型別。

迭代器的誕生使得演算法和容器分離成為可能。演算法是模版,其型別依賴於迭代器,不會侷限於單一容器。不同的stl演算法需要不同型別的迭代器來實現相應的功能。因為不同型別的stl容器支援不同型別的迭代器,所以不能對所有容器使用相同的演算法。

模版引擎RazorEngine簡介

asp.net mvc的razor想必大家都比較熟悉,這裡介紹乙個獨立於asp.net的razorengine。razorengine是乙個開源的專案,它的基礎就是asp.net mvc的razor。github專案位址。您可以在windows console或者windows forms使用它。下...

標準模版庫

stl 標準模版庫,standard template library 和mfc相比,stl更加複雜和強大。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 stl是跨平台的 一些基礎概念的定義 模板 template 類 以及結構等各種資料型...

標準模版庫

include include include include using namespace std int main void 使用迭代器遍歷裡面的全部元素 vector iterator itor for itor vec.begin itor vec.end itor cout size v...