這篇文章主要介紹“C++容器底層數(shù)據(jù)結(jié)構(gòu)介紹”,在日常操作中,相信很多人在C++容器底層數(shù)據(jù)結(jié)構(gòu)介紹問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C++容器底層數(shù)據(jù)結(jié)構(gòu)介紹”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
金口河網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司于2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
int arr[10][10]; memset(arr,0,10*10*sizeof(int)); //初始化 int tmp[10][10]; memcpy(arr, tmp, 10 * 10 * sizeof(int));//拷貝
void *memcpy(void *destin, void *source, unsigned n); //源*目的內(nèi)存覆蓋問(wèn)題
memcpy 函數(shù)用于 把資源內(nèi)存(src所指向的內(nèi)存區(qū)域) 拷貝到目標(biāo)內(nèi)存(dest所指向的內(nèi)存區(qū)域);拷貝多少個(gè)?有一個(gè)size變量控制拷貝的字節(jié)數(shù);
array<T,N> (數(shù)組容器) :基于數(shù)組,長(zhǎng)度固定的序列,有 N 個(gè) T 類型的對(duì)象。
vector<T> (向量容器) :基于數(shù)組,長(zhǎng)度可變的序列,用來(lái)存放T類型的對(duì)象,預(yù)留分配大一些的一段連續(xù)空間,當(dāng)超出時(shí)會(huì)二次分配更大的拷貝過(guò)去。
deque<T> (雙端隊(duì)列容器) :長(zhǎng)度可變序列,用來(lái)存放T類型的對(duì)象,在序列的兩端都能高效地增加或刪除元素,由一段一段的定量連續(xù)空間構(gòu)成,下標(biāo)訪問(wèn)必須進(jìn)行二次指針解引用,與之相比 vector 的下標(biāo)訪問(wèn)只進(jìn)行一次,只保有一個(gè)元素的 deque 必須分配其整個(gè)內(nèi)部數(shù)組(例如 64 位 libstdc++ 上為對(duì)象大小 8 倍; 64 位 libc++ 上為對(duì)象大小 16 倍或 4096 字節(jié)的較大者)。
list<T> (鏈表容器) :長(zhǎng)度可變的、由 T 類型對(duì)象組成的序列,它以雙向鏈表的形式組織元素,在這個(gè)序列的任何地方都可以高效地增加或刪除元素。訪問(wèn)容器中任意元素的速度要比前三種容器慢,這是因?yàn)?list<T> 必須從第一個(gè)元素或最后一個(gè)元素開(kāi)始訪問(wèn),需要沿著鏈表移動(dòng),直到到達(dá)想要的元素。
forward list<T> (正向鏈表容器) :長(zhǎng)度可變的、由 T 類型對(duì)象組成的序列,它以單鏈表的形式組織元素,是一類比鏈表容器快、更節(jié)省內(nèi)存的容器,但是它內(nèi)部的元素只能從第一個(gè)元素開(kāi)始訪問(wèn)。
string:與vector相似的容器,但專門用于保存字符。隨機(jī)訪問(wèn)快。在尾部插入/刪除速度快。
所有序列容器的函數(shù)成員 max_size() 都會(huì)返回它能存儲(chǔ)的元素個(gè)數(shù)的最大值。這通常是一個(gè)很大的值,一般是 2^32 -1。
The standard container classes vector, deque and list fulfill these requirements. By default, if no container class is specified for a particular stack class instantiation, the standard container deque is used.
默認(rèn)使用deque
而不是vector
作為底層容器
set、map、multimap基于紅黑樹(shù),是非嚴(yán)格平衡二叉搜索樹(shù),元素有序,且插入、刪除效率高但空間占用率高
unordered_set、unordered_map、unordered_multimap基于哈希表,元素?zé)o序,查找效率高。
內(nèi)存占有率的問(wèn)題就轉(zhuǎn)化成紅黑樹(shù) VS hash表 , 還是unorder_map占用的內(nèi)存要高,哈希表的建立比較耗費(fèi)時(shí)間。
map<string,vector<int> > empty_map1; map1.swap(empty_map1); map1.clear(); 或 StrategyMap().swap(_stg_flows);
map.clear()只是把map清空了,但是內(nèi)存沒(méi)有釋放,如果要釋放內(nèi)存不止是要clear()掉,還要和一個(gè)空的map來(lái)進(jìn)行swap,將內(nèi)存釋放。
注意map中如果元素不是基本類型,也要進(jìn)行內(nèi)存釋放,如指針,vector要尤其注意,否則map占的內(nèi)存太大,會(huì)造成程序崩潰。
array: 固定長(zhǎng)度的數(shù)組,使用棧(靜態(tài)內(nèi)存分配),因此效率與數(shù)組相同。
使用fill方法實(shí)現(xiàn)了數(shù)據(jù)填充。
使用size方法取得數(shù)組的大小。
雖然at(i)方法實(shí)現(xiàn)帶有越界檢查的讀寫。
寫入速度的比較結(jié)果:內(nèi)置數(shù)組的速度最快,vector容器次之,array容器最慢???
拷貝速度:https://blog.csdn.net/qq_35976351/article/details/82940121
拷貝:/* 未開(kāi)優(yōu)化: array=466ms vector=7923ms memcpy=198ms */ /* -O3優(yōu)化,最高速度: array=0ms vector=453ms memcpy=0ms */
在STL中,使用迭代器(內(nèi)置類型 iterator)給出數(shù)據(jù)在表中的位置
正向迭代器:containerType::iterator itr
;
常量正向迭代器(不可更改):containerType::const_iterator itr
;
反向迭代器:containerType::reverse_iterator itr
;
常量反向迭代器:containerType::const_reverse_iterator itr
;
常用的需要使用迭代器的容器方法:
iterator insert(iterator pos, const Object & x)
:添加x到表中迭代器pos所指向的位置之前的位置。對(duì)1ist是常量時(shí)間操作,對(duì)vector則不是。返回值是一個(gè)指向插入項(xiàng)位置的迭代器
iterator erase(iterator pos)
:刪除迭代器所給出位置的對(duì)象。對(duì)1ist是常量時(shí)間操作,對(duì)vector不是。返回值是調(diào)用之前pos所指向元素的下一個(gè)元素的位置。這個(gè)操作使pos失效。pos不再有用,因?yàn)樗赶虻娜萜髯兞恳呀?jīng)被刪除了
iterator erase(iterator start, iterator end)
:刪除所有的從位置start開(kāi)始直到位置end(但是不包括end)的所有元素
到此,關(guān)于“C++容器底層數(shù)據(jù)結(jié)構(gòu)介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
網(wǎng)站名稱:C++容器底層數(shù)據(jù)結(jié)構(gòu)介紹
文章位置:http://jinyejixie.com/article20/ijjjjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、微信公眾號(hào)、網(wǎng)站導(dǎo)航、Google、網(wǎng)站策劃、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)