stl的學習

    stl是c++的標準模板庫,其應用是快速的構建程序以及高效的重用代碼,並且移植性非常好。

    stl包含三部分內容:容器,迭代器,算法。
    迭代器是stl的核心,它連接了容器與算法,使得整個stl的體系得以強壯。
    首先講述容器,容器包含了
    順序容器:<vector>,<deque>,<list>
    關聯容器:<map>,<set>,<multimap>,<multiset>
    容器適配器:<queue>,<stack>,<priority_queue>
    所有容器的基本操作都是基於插入值,刪除值,遍歷值而展開的,其實這三個基本操作也是整個數據結構,算法當中最基本的三個操作。
    在容器的插入值的算法中主要是提供了c<type> insert(value),在基本的插入算法下順序容器還擁有push_back(value),push_front(value)插入算法。
    刪除值算法主要是提供了c<type> erase(value),在基本的刪除值算法下,順序容器還擁有pop_back(value),pop_front()算法。
    遍歷值主要是通過迭代器進行(迭代器實際上就是指向數據的指針)。
    在容器適配器中,所有的操作主要是依靠調用容器的操作進行,看似堆棧,隊列的操作實際上是調用了容器的基本算法。
   在容器操作中需要注意的是(1)每當刪除了值以後,那麼迭代器會失效,這樣程序是無法進行的。(2)容器都有自己的數據類型,不能用常用的int,long之類的來定義。(3)在運用容器中,注意容器的選用,vector,deque的數據結構基於線性表,而list的數據結構基於鏈表,所以當操作需要更多的隨機訪問時做好選用vector,deque,而當需要更多的是插入與刪除那麼最好選用list容器。

   接下來介紹迭代器
   迭代器對於操作集,可分爲(1)插入迭代器,(2)流迭代器,(3)反向迭代器,(4)const迭代器。
   算法之所以不直接刪除和添加元素,主要是提供插入迭代器完成的。而流迭代器主要是提供輸入輸出的方便。之所以有反向迭代器,主要是因爲在算法中都是用迭代器自加完成的,而有些功能比如說要逆序訪問時,那麼反向迭代器的自加正好可以用。當容器是是const類型時,注意寫入算法是不能調用的,而不管本身容器到底提供了哪些容器。還要注意的是算法對一對迭代器的類型必須要相同,不能一個是const而另一個卻不是const。
   迭代器對於算法可以分爲,輸入迭代器,輸出迭代器,前向迭代器,雙向迭代器,隨機訪問迭代器。
   以下是各種迭代器所支持的操作:
   輸入迭代器:讀,不能寫  == != ++ * -> 支持的算法:find...istream_iterator是輸入迭代器。
   輸出迭代器:寫,不能讀 ++ * 支持的算法:copy...ostream_iterator是輸出迭代器。
   前向迭代器:讀和寫 同時擁有輸入迭代器和輸出迭代器的算法 支持的算法:replace...
   雙向迭代器: 讀和寫 擁有前向迭代器的算法和-- 支持的算法:reverse...
   隨機訪問迭代器:讀和寫 完整的迭代器算術運算 支持的算法:sort...
   
   最重要的是要知道算法到底對什麼樣的迭代器纔是有效的。
   算法主要是包括3類,讀算法,寫算法,排序算法。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章