ACM ICPC競賽之STL簡介

2021-07-13 22:06:28 字數 1975 閱讀 9921

acm模版

stl(standard template library,標準模版庫)是c++語言標準中的重要組成部分。stl以模板類和模版函式的形式為程式設計師提供了各種資料結構和演算法的實現,程式設計師吐過能夠充分的利用stl,可以在**空間、執行時間和編碼效率上獲得極大的好處。

stl大致可以分為三大類:演算法(algorithm)、容器(container)、迭代器(iterator)。

stl容器是一些模版類,提供了多種組織資料的常用方法,例如:vector(向量,類似於陣列)、list(列表,類似於鍊錶)、deque(雙向佇列)、set(集合)、map(映像)、stack(棧)、queue(佇列)、priority_queue(優先佇列)等,通過模版的引數我們可以指定容器中的元素型別。

stl演算法是一些模版函式,提供了相當多的有用的演算法和操作,從簡單的for_each(遍歷)到複雜的stable_sort(穩定排序)。

stl迭代器是對c中的指標的一般化,用來將演算法和容器聯絡起來。幾乎所有的stl演算法都是通過迭代器來訪問元素序列進行工作的,而stl中的每乙個容器也都定義了其本身所專有的迭代器,用以訪問容器中的元素。有趣的是,普通的指標也可以像迭代器一般的工作。

熟悉了stl後,你會發現,很多功能只需要用短短的幾行就可以實現了。通過stl,我們可以構造出優雅而且高效的**,甚至比你自己手工實現的**效率還要高很多。

stl的另外乙個特點是,它是以原始碼方式免費提供的,程式設計師不僅可以自由地使用這些**,也可以學習其原始碼,甚至可以按照自己的需要去修改它,這一點十分得人性化。

example:

(stl實現ugly numbers)

#include 

#include

/* * ugly numbers

* ugly numbers are numbers whose only prime factors are 2, 3 or 5.

* 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...

*/typedef

std::pairlong, int> node_type;

int main(int argc, const

char * argv)

result[i] = node.first;

}int n;

std::cin >> n;

while (n > 0)

return

0;}

在acm競賽中,熟練掌握和運用stl對快速編寫實現**會有極大的幫助。

在c++標準中,stl被組織為以下的一組標頭檔案(注意,是沒有.h字尾的!):

algorithm/deque/functional/iterator/list/map/memory/numeric/queue/set/stack/utility/vector

當我們需要使用stl的某個功能時,需要嵌入相應的標頭檔案。但要注意的是,在c++標準中,stl是被定義在std命名空間中的。如下例所示:

#include 

int main()

如果希望在程式中直接引用stl,也可以在嵌入標頭檔案後,用using namespace 語句將std命名空間匯入,如下例:

#include 

using

namespace

std;

int main()

但是需要強調的是,在實際的開發中,不建議直接匯入std命名空間,而在acm/icpc等演算法競賽中,直接匯入會有很大的優勢,提高編碼效率。所以我們要分清楚是競賽還是實際的開發。

stl是c++語言機制運用的乙個典範,通過學習stl可以更深刻的理解c++語言的思想和方法。在本系列的文章中不打算對stl做深入的剖析,而只是想介紹一些stl的基本應用。

有興趣的同學,建議可以在有了一些stl的使用經驗後,認真閱讀一下《c++ stl》這本書。

ACM ICPC競賽之除錯

在寫程式時,除錯程式也是乙個重要的環節。怎樣才能夠更有效地除錯程式,發現並修正錯誤呢?1 除錯中的輸入輸出 為了除錯程式,我們可能需要反覆執行程式,也就需要反覆輸入相同或不相同的測試資料。如果每次除錯執行時都是以手工的方式輸入測試資料,相信很多人都會覺得不勝其煩。其實我們可以用一些輔助的手段來簡化這...

一年ACM ICPC競賽的感想

想自己剛接觸acm icpc時,看到乙個華東理工寫的acm辛苦歷程,甚是激情澎湃,因為我的學校也是弱校,只不過我們比他們還弱而已。我是在大二的上學期才開始接觸它的,當時沒多大感情,它只不過是我混過的大一向學習的大二的乙個跳板。沒想到,到現在整整一年,我的這一年的大部分時間都花在這上面,從剛開始的學資...

STL容器簡介

stl的容器可以分為以下幾個大類 一 序列容器,有vector,list,deque,string.二 關聯容器,有set,multiset,map,mulmap,hash set,hash map,hash multiset,hash multimap 三 其他的雜項 stack,queue,va...