日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ STL泛型编程——在ACM中的运用

發布時間:2025/6/15 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ STL泛型编程——在ACM中的运用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? 學習過C++的朋友們應該對STL和泛型編程這兩個名詞不會陌生。兩者之間的關系不言而喻,泛型編程的思想促使了STL的誕生,而STL則很好地體現了泛型編程這種思想。這次想簡單說一下STL在ACM中的一些應用。我們知道,在ACM競賽中,經常需要用到數組、字符串、隊列、堆棧、鏈表等數據結構和排序、搜索等算法,以提高程序的時間、空間運行效率。然而如果這些數據結構總是需要手工來編寫,那無疑會是一件很麻煩的工作,而STL的出現很好地解決了這個問題。

? ? ? 我們簡單來了解一下STL。STL提供了三種類型的組件:容器、迭代器和算法。容器主要有兩類:順序容器和關聯容器。順序容器(vector、list、deque和string等)是一系列元素的有序集合。關聯容器(set、multiset、map和multimap)包括查找元素的鍵值。迭代器的作用是遍歷容器。STL算法庫包含四類算法:排序算法、不可變序算法、變序性算法和數值算法。下面就簡單介紹一下STL里常用的容器。

? ? ? 1. vector向量容器

? ? ? vector向量容器不但像數組一樣對元素進行隨機訪問,還能在尾部插入元素,是一種簡單、高效的容器,完全可以替代數組。由于vector具有內存自動管理的功能,對于元素的插入和刪除,可動態調整所占的內存空間,因此使用時不需要考慮釋放空間的問題。使用vector向量容器時,需要包含頭文件“vector”。(即#include <vector>)對于vector容器的容量定義,可以事先定義一個固定大小,事后可以隨時調整其大小;(例如vector<int> v(10); //定義一個用來存儲10個int類型元素的向量容器)也可以事先不用定義其大小,使用push_back()方法從尾部擴張元素,也可以使用insert()在某個元素位置前插入新元素。

? ? ? vector容器有兩個重要的方法,begin()和end()。begin()返回的是首元素位置的迭代器;end()返回的是最后一個元素的下一個元素位置的迭代器。通常在遍歷vector所有元素時會用到這兩個方法。例如:

vector<int> v(3); vector<int>::iterator it; for(it=v.begin(); it!=v.end(); it++){...}

  至于vector元素的刪除,調用erase()方法可以刪除vector中迭代器所指的一個元素或一段區間中的所有元素,clear()方法則可以刪除vector中所有元素。

? ? ? 通過使用size()方法可以返回向量的大小,即元素個數,調用empty()方法返回向量是否為空。

? ? ? 再簡單看一下在vector中常用到的算法。使用reverse()反向排列算法,需要定義頭文件“#include <algorithm>”,reverse()算法可將向量中某段迭代器區間元素反向排列;使用sort算法可以對向量排序,默認情況下對元素進行升序排列,也可以自己設計排序比較函數,具體使用細節就不贅述了。

? ? ? 2. string基本字符系列容器

? ? ? C語言中對于字符串只能使用字符數組來處理,顯得十分不方便。C++ STL提供了string基本字符序列容器來處理字符串,可以把string理解為字符串類,它提供了添加、刪除、替換、查找和比較等豐富方法。使用string容器需要包含頭文件聲明“#include <string>”。

? ? ? 3. set集合容器

? ? ? set集合容器實現了紅黑樹的平衡二叉檢索樹的數據結構,在插入元素時,它會自動調整二叉樹的排列,把該元素放到適當的位置,以確保每個子樹根節點的鍵值大于左子樹所有節點的鍵值,而小于右子樹所有節點的鍵值;另外,還得確保根節點左子樹的高度與右子樹的高度相等,因為二叉樹高度最小,檢索速度最快。這里要注意的是,set容器不會插入相同鍵值的元素。

? ? ? 平衡二叉檢索樹的檢索使用中序遍歷算法,檢索效率高于vector、deque和list等容器。另外,采用中序遍歷算法可將鍵值由小到大遍歷出來,所以,可以理解為平衡二叉檢索樹在插入元素時,就會自動將元素按鍵值由小到大的順序排列。由于構造set集合的主要目的就是為了快速檢索,對于set容器中的鍵值,不可直接去修改。multiset、map和multimap的內部結構也是平衡二叉檢索樹。

? ? ? 4. multiset多重集合容器

? ? ? multiset與set一樣,也是使用紅黑樹來組織元素數據的,唯一不同的是,multiset允許重復的元素鍵值插入,而set則不允許。multiset也需要聲明頭文件包含“#include <set>”,由于它包含重復元素,所以在插入元素、刪除元素、查找元素上較set有差別。

? ? ? 5. map映照容器

? ? ? map映照容器的元素數據是由一個鍵值和一個映照數據組成的,鍵值與映照數據之間具有一一映照的關系。map映照容器的數據結構也是采用紅黑樹來實現的,插入元素的鍵值不允許重復,比較函數只對元素的鍵值進行比較,元素的各項數據可通過鍵值檢索出來。由于map與set采用的都是紅黑樹的數據結構,所以它們的用法基本類似。使用map容器需要頭文件包含語句“#include <map>”。

? ? ? 6. multiset多重映照容器

? ? ? multiset與map基本相同,唯獨不同的是,mulitiset允許插入重復鍵值的元素。由于允許重復鍵值存在,所以multiset的元素插入、刪除、查找都與map不相同。

? ? ? 7. deque雙端隊列容器

? ? ? deque雙端隊列容器與vector一樣,采用線性表順序存儲結構。但與vector唯一不同的是,deque采用分塊的線性存儲結構來存儲數據,每塊的大小一般為512字節,稱為一個deque塊,所有的deque塊使用一個Map塊進行管理,每個Map數據項紀錄每個deque塊的首地址。這樣,deque塊在頭部和尾部都可插入和刪除元素,而不需移動其他元素。一般來說,當考慮到容器元素的內存分配策略和操作的性能時,deque相對于vector會更有優勢。使用deque需要聲明頭文件包含“#include <deque>”。

? ? ? 8. list雙向鏈表容器

? ? ? list容器實現了雙向鏈表的數據結構,數據元素是通過鏈表指針串連成邏輯意義上的線性表,這樣,對鏈表的任一位置的元素進行插入、刪除和查找都是極快速的。由于list對象的節點并不要求在一段連續的內存中,所以對于迭代器,只能通過“++”或“--”的操作將迭代器移動到后繼/前驅節點元素處。而不能對迭代器進行+n或-n的操作,這點是與vector等不同的地方。使用list需要聲明頭文件包含“#include <list>”。

? ? ?9. stack堆棧容器

? ? ?stack堆棧是一個后進先出的線性表,插入和刪除元素都只能在表的一端進行。插入元素的一端稱為棧頂,另一端稱為棧底。插入元素叫入棧,元素的刪除稱為出棧。要使用stack必須聲明頭文件包含語句“#include <stack>”。

? ? ?10. queue隊列容器

? ? ?queue隊列容器是一個先進先出的線性存儲表,元素的插入只能在隊尾,元素的刪除只能在隊首。使用queue需要聲明頭文件包含語句“#include <queue>” 。

總結

以上是生活随笔為你收集整理的C++ STL泛型编程——在ACM中的运用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费无码av片在线观看 | 国产99对白在线播放 | 日本xx视频免费观看 | 欧美性视频播放 | 亚洲精品三级 | 国产三级久久久 | 中国国语农村大片 | 好大好舒服视频 | 久久久这里有精品 | av在线不卡免费观看 | 国产乱叫456在线 | 91视频在线网站 | av资源网在线观看 | 免费黄色一区二区 | 黄色中文| www.中文字幕在线观看 | 久久精品亚洲精品国产欧美 | 久热国产在线 | 91精品国产闺蜜国产在线闺蜜 | 福利在线一区二区 | 国产精品无码久久久久久 | 夜夜春视频 | 国内毛片毛片毛片 | 鬼灭之刃柱训练篇在线观看 | 免费无遮挡无码永久在线观看视频 | 2025国产精品视频 | 蜜桃视频一区二区 | 91丨porny丨国产入口 | 国产精品无码av在线有声小说 | 97xxx | 男女视频在线 | 黄色性网站 | www.久久色 | 日本不卡一区在线观看 | 开元在线观看视频国语 | 欧美一区二区在线观看视频 | 国产精品99久久久久久久久久久久 | 韩日在线视频 | 国精产品一二三区精华液 | 成年人看的网站 | 午夜精品小视频 | 欧美日韩在线一区二区 | 绿帽视频| 亚洲男女视频 | 国产日批视频在线观看 | 91丝袜一区在线观看 | 亚洲国产97| 国产九区| 日本精品一二三区 | 久久亚洲国产成人精品性色 | 免费裸体视频女性 | 殴美一区二区 | 欧美黑人精品一区二区 | 国产精品传媒 | 成年人网站黄色 | 成人欧美一区二区三区在线观看 | a√天堂资源 | 国产奶水涨喷在线播放 | 天堂а√在线中文在线新版 | 亚洲性生活大片 | 久久久久久久久精 | 日韩在线三区 | 噜噜噜视频 | 婷婷色基地 | www亚洲一区| 日本亚洲高清 | av黄色网 | 色丁香在线 | 日韩久久久久久久久久 | 国产一区二区视频免费在线观看 | 色成人综合 | 男插女视频在线观看 | 粉嫩欧美一区二区三区 | 日韩一区不卡 | 五级 黄 色 片 | 国内自拍在线观看 | 亚洲熟妇中文字幕五十中出 | 国产成人资源 | 丰满少妇大力进入 | 日韩乱码人妻无码中文字幕久久 | 日韩一级二级三级 | 午夜精品免费视频 | 欧美一区二区不卡视频 | 波多野结衣av一区二区全免费观看 | 男生女生羞羞网站 | 丝袜国产视频 | 欧美精品videos另类日本 | 无码日韩精品一区二区 | 午夜av免费观看 | 亚洲av无码乱码国产精品久久 | 中国女人性猛交 | 国产二级一片内射视频播放 | 色无五月 | 欧美人与禽性xxxxx杂性 | 黑人巨大av| 铠甲勇士猎铠 | 久热国产精品视频 | 日本美女裸体视频 | 生活片毛片 |