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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL 容器 与 数据结构

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL 容器 与 数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.序列式容器(各元素之間是線性關系,vector, deque,list):迭代器類型,隨機訪問迭代器(list是雙向訪問迭代器,不支持隨機訪問)。

?1.vector,向量

相當于動態數組,當程序員不知道需要的數組多大時,用其來解決問題來達到最大節約空間。

在不需要擴容的情況下,它的操作時間復雜度和數組一樣。

vector占用的內存是只增不減的,它的erase和clear函數只刪除元素,不回收空間,只在vector析構時回收空間。

也有insert函數,可在任意下標位置插入、刪除(但不在尾部插入的話會導致指向vector的iterator、pointer,reference失效)。

2.deque,雙向隊列

邏輯結構:首尾都開放的動態數組

內部結構:多個連續的內存塊,在一個映射結構中保存他們的地址和順序

insert函數,可在任意下標位置插入、刪除(但不在首尾部插入的話會導致指向vector的iterator、pointer,reference失效)。

不同于vector,當deque的內存不再被使用時,會自動釋放。

3.list,雙向鏈表

list每個節點都保存了信息塊(元素值)、前驅指針、后驅指針,因此占用空間更大。

list由于是鏈表形式,在任意位置插入和刪除效率都很高O(1),但對元素的訪問復雜度O(n)。

二.關聯式容器(元素按key值有序插入:set,multiset,map,multimap,都是由紅黑樹實現)

紅黑樹查找、插入、刪除操作的時間復雜度是O(lgn)。采用插入方式生成一棵紅黑樹的時間復雜度是O(nlgn),而遍歷紅黑樹的時間復雜度是O(n)。

迭代器類型:雙向迭代器。

三.容器適配器(具有某種特殊功能的容器變種,不提供迭代器:stack、queue、priority_queue)

他們和容器的構造不同在于他們有一個參數class container,而容器有一個參數allocator

//vector template<class T,class Allocator = std::allocator<T> > class vector; //stack template<class T,class Container = std::deque<T> > class stack;

首先了解一下priority_queue的定義:

template<class T,class Container = std::vector<T>,class Compare = std::less<typename Container::value_type> > class priority_queue;

priority_queue的一般性構造函數

template<InputIt> priority_queue(InputIn first,InputIn last,const Compare& compare, const Container& cont); //初始化例子 priority_queue<pair<string,int>,vector<pair<string,int>>,WordFreCompare > wordQue(wordMap.begin(),wordMap.end());

priority_queue默認比較符號 < ,它只保證隊首top()是最大的元素,內部不一定有序。

四.unorder_map(hash表):內部是無序的,只與key相關(所以在使用自定義類型時,map要定義 < ,unorder_map要定義==)

還有4種散列(hash)關聯容器(hash_set,hash_multiset,hash_map,hash_multimap):如果沒有沖突,散列表的查找、存取時間復雜度是O(1),但一般沖突是不可避免的,所以時間復雜度不確定。

(hash表的桶一般是數組,計算出來的hash值一般是整數,可直接作為下標訪問。)

unorder_map定義:

template<class Key,class T,class Hash = std::hash<Key>,class KeyEqual = std::equal_to<Key>,class Allocator = std::allocator< std::pair<const Key, T> > > class unordered_map;

?

轉載于:https://www.cnblogs.com/wukuaiqian/p/7768850.html

總結

以上是生活随笔為你收集整理的STL 容器 与 数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

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