成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++容器底層數(shù)據(jù)結(jié)構(gòu)介紹

這篇文章主要介紹“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)公司。

內(nèi)置數(shù)組:

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、vector 、deque、 list 、 forward_list

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。

C++容器底層數(shù)據(jù)結(jié)構(gòu)介紹

Stack

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、unordered_set、unordered_map、unordered_multimap的底層數(shù)據(jù)結(jié)構(gòu),以及幾種map容器如何選擇?

  • 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ì)造成程序崩潰。

vector

C++容器底層數(shù)據(jù)結(jié)構(gòu)介紹

array: 固定長(zhǎng)度的數(shù)組,使用棧(靜態(tài)內(nèi)存分配),因此效率與數(shù)組相同。

  1. 使用fill方法實(shí)現(xiàn)了數(shù)據(jù)填充。

  2. 使用size方法取得數(shù)組的大小。

  3. 雖然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 */

迭代器iterator

在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)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
大厂| 河池市| 通州区| 科技| 吉水县| 清涧县| 怀宁县| 昭平县| 普格县| 安义县| 个旧市| 南岸区| 威海市| 抚州市| 宣化县| 射洪县| 文成县| 哈密市| 肥城市| 高雄市| 高淳县| 柞水县| 普兰店市| 青海省| 荣成市| 丹东市| 商城县| 苗栗市| 开原市| 宝丰县| 天等县| 曲周县| 司法| 报价| 武川县| 田林县| 益阳市| 九龙坡区| 邵东县| 鱼台县| 汉寿县|