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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STL容器设计原理

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL容器设计原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、內存映像 ? ?? 容器在概念上是一種可以動態增大或減小的模型,所以其元素在實現上不可能直接保存在容器對象里,而應該保存在自由內存或堆上。這里要區分兩個概念“容器對象”和“容器元素對象”。容器本身就是一個C++對象,其大小在運行時是不可以改變,因此容器應該有辦法指示其每一個元素在內存中的位置,以便用戶能通過容器對象找到其中的元素對象。
二、存儲方式和訪問方式 ? ? ?向量和鏈表是兩種最基本的動態結構,也是STL中兩種最基本的容器,分別對應動態數組和鏈表結構,同時他們分別代表了內存中同類型批量數據存放的兩種基本方式:連續存儲和隨機存儲(不連續存儲)。 ? ? ?不同的存儲方式決定了不同的訪問方式,順序訪問和隨機訪問。所謂的隨機訪問是指通過開銷恒定的算數運算來得到任一元素的內存地址的訪問方法。而順序訪問則是指從第一個元素開始遍歷,直到找到所需的元素為止。C++/C的內置數組和vector既可以隨機訪問也可以順序訪問的容器,而list則只能順序訪問。 ? ? ?只要底層存儲機制采取連續存儲方式的容器,就可以隨機訪問其中任一元素,否則只能順序訪問,任何容器都能順序訪問。 三、容器的分類 ? ? ?STL中將容器劃分為兩類:順序容器和關聯式容器。這里的“順序”和“關聯”指的是上層接口表現出來的訪問方式,并非底層存儲方式。STL主要采用向量、鏈表、二叉樹和它們的組合作為底層存儲結構來實現容器。 ? ? ?鏈表(list)作為順序容器的典型代表,其特點是“天然有序”,即各元素之間具有天然的相對位置關系。 ? ? ?集合(set)是關聯式容器的典型代表,關聯式容器在概念上是無序的,但只計算機上實現這樣的數學模型,不但要使上層的訪問接口正確反映集合的概念,還要考慮實現效率。因此關聯式容器在實現上必須是有序和排序的,只不過對用戶透明。平衡二叉搜索樹能夠滿足這些要求。
四、什么樣的對象能作為STL的容器元素。 根據上述條件,顯然引用不能作為STL容器的元素類型:第一、引用在創建時必須初始化為一個具體的對象,而STL容器不能滿足這一要求。二引用沒有構造函數和析構函數,更沒有賦值語義。STL容器只支持對象語義,而不支持引用語義。例如下面的定義是錯誤的, ? ? ?std::list<double&> id(10); 采用接管方式創建和釋放不對稱的指針對象都不適合作為STL容器的元素,想auto_ptr<>。 參考書: 《高質量程序設計--C/C++描述》

總結

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

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