1. 程式人生 > >淺談C++容器( 三)

淺談C++容器( 三)

文章轉載自blog.csdn.net/acosoft  

文章主要從巨集觀層面對容器進行了分類講解,大牛請直接無視本文。

有了對資料結構的基本認識,那麼對高階語言所提出的容器的概念就很容易理解。下面我們就來了解一下C++ 標準模板庫(STL) 提所供的10 種通用容器。

什麼是容器

首先,我們必須理解一下什麼是容器,在C++ 中容器被定義為:在資料儲存上,有一種物件型別,它可以持有其它物件或指向其它對像的指標,這種物件型別就叫做容器。很簡單,容器就是儲存其它物件的物件,當然這是一個樸素的理解,這種“物件”還包含了一系列處理“其它物件”的方法,因為這些方法在程式的設計上會經常被用到,所以容器也體現了一個好處,就是“容器類是一種對特定程式碼重用問題的良好的解決方案”。

容器還有另一個特點是容器可以自行擴充套件。在解決問題時我們常常不知道我們需要儲存多少個物件,也就是說我們不知道應該建立多大的記憶體空間來儲存我們的物件。顯然,陣列在這一方面也力不從心。容器的優勢就在這裡,它不需要你預先告訴它你要儲存多少物件,只要你建立一個容器物件,併合理的呼叫它所提供的方法,所有的處理細節將由容器來自身完成。它可以為你申請記憶體或釋放記憶體,並且用最優的演算法來執行您的命令。

容器是隨著面嚮物件語言的誕生而提出的,容器類在面嚮物件語言中特別重要,甚至它被認為是早期面嚮物件語言的基礎。在現在幾乎所有的面向物件的語言中也都伴隨著一個容器集,在C++ 中,就是標準模板庫(STL )。

和其它語言不一樣,C++ 中處理容器是採用基於模板的方式。標準C++ 庫中的容器提供了多種資料結構,這些資料結構可以與標準演算法一起很好的工作,這為我們的軟體開發提供了良好的支援!

通用容器的分類

STL 對定義的通用容器分三類:順序性容器、關聯式容器和容器介面卡。

順序性容器 是一種各元素之間有順序關係的線性表,是一種線性結構的可序群集。順序性容器中的每個元素均有固定的位置,除非用刪除或插入的操作改變這個位置。這個位置和元素本身無關,而和操作的時間和地點有關,順序性容器不會根據元素的特點排序而是直接儲存了元素操作時的邏輯順序。比如我們一次性對一個順序性容器追加三個元素,這三個元素在容器中的相對位置和追加時的邏輯次序是一致的。

關聯式容器 和順序性容器不一樣,關聯式容器是非線性的樹結構,更準確的說是二叉樹結構。各元素之間沒有嚴格的物理上的順序關係,也就是說元素在容器中並沒有儲存元素置入容器時的邏輯順序。但是關聯式容器提供了另一種根據元素特點排序的功能,這樣迭代器就能根據元素的特點“順序地”獲取元素。

關聯式容器另一個顯著的特點是它是以鍵值的方式來儲存資料,就是說它能把關鍵字和值關聯起來儲存,而順序性容器只能儲存一種(可以認為它只儲存關鍵字,也可以認為它只儲存值)。這在下面具體的容器類中可以說明這一點。

容器介面卡 是一個比較抽象的概念, C++ 的解釋是:介面卡是使一事物的行為類似於另一事物的行為的一種機制。容器介面卡是讓一種已存在的容器型別採用另一種不同的抽象型別的工作方式來實現的一種機制。其實僅是發生了介面轉換。那麼你可以把它理解為容器的容器,它實質還是一個容器,只是他不依賴於具體的標準容器型別,可以理解是容器的模版。或者把它理解為容器的介面,而介面卡具體採用哪種容器型別去實現,在定義介面卡的時候可以由你決定。

下表列出STL 定義的三類容器所包含的具體容器類:

相關推薦

C++容器

文章轉載自blog.csdn.net/acosoft   文章主要從巨集觀層面對容器進行了分類講解,大牛請直接無視本文。 有了對資料結構的基本認識,那麼對高階語言所提出的容器的概念就很容易理解。下面我們就來了解一下C++ 標準模板庫(STL) 提所供的10 種通用容器。

C++類7--解構函式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C++類4--隱式類型別轉換

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

WebService開發

man att set style 訪問 row nag 序列 ros 一、什麽是WebService: 簡單通俗來說,就是企業之間、網站之間通過Internet來訪問並使用在線服務,一些數據,由於安全性問題,不能提供數據庫給其他單位使用,這時候可以使

養成良好的學習習慣-學習方法2

成功最有效的方法是想有經驗的人學習成功最有效的方法是想有經驗的人學習!借鑒成功的人的態度和習慣。你可以讓你在任何想達到的目標表提高成功率!1、學習不專心。上課期間少幹別的。上課保持最大化的輸入,討論自己把知識最大化的輸出。課下把知識最大化會化的輸出。2、分組學習,找1-2個同伴,共同學習。今天上午學一個點,共

養成良好的學習習慣-學習方法1

養成 學習習慣 良好的 淺談學習方法(1) 1.老男孩教育要培訓什麽? 思想技術 知識 2.養成良好的學習習慣和聽課習慣 1)帶一支筆和本,記錄老師講解的內容 2 總結時 ,記錄關鍵的信息,抓重點 3) 聽課習慣:調動所有感官學習 眼睛看、勤動手(

C++學習入門篇——函數

image clu square src 函數接口 值類型 使用 mes 技術分享 C++函數分兩種:有返回值的和沒返回值的 1.有返回值的函數 調用函數流程 如圖,sqrt(6.25)為函數調用,

Java數組

spa bound pan .... exceptio 運行 輸出 結構 語法 數組: 編程語言中最常見的一種數據結構,數組就是內存中一段連續的存儲空間。可以用於存儲多個數據,每個數組元素存放一個數據,通常可通過數組元素的索引來訪問數組元素。 1.java數組:   具有相

C語言---輸入和輸出

而是 abs 空間 精度 保存 括號 ger 原型 parameter 一、輸出   輸入輸出:英文是Input/Output簡稱IO。   C語言標準函數庫中,提供了關於以下介紹的幾種輸出函數,(所有標準輸入輸出函數在調用前,必須先包含頭文件stdio.h) 1.1 簡單

沃特森萬融VAC鏈積分增值體系的顛覆性應用

分享 tle gin 不同 value ces 0ms 移動通信 conf 從區塊鏈歷史上來說,先誕生了比特幣,當時並沒有區塊鏈這個技術和名詞,然後業界從比特幣中提取了技術架構和體系,稱之為區塊鏈技術。從比特幣提取的區塊鏈技術稱之為區塊鏈1.0時代,那個時候的應用主要以電子

並發容器非阻塞隊列的並發容器

接口 index except jdk1 fab lis tarray warning 上進 ??本文將介紹除了阻塞隊列外的並發容器: ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet、Concurrent

C語言- 結構體

strong 變量初始化 add num ID name oid nbsp clu 一、結構體 1、一般形式 不同類型數據組成的組合型數據結構,即結構體。 結構體類型的一般形式: 1 struct 結構體名{ 2 類型名 成員名1; 3 類型名 成員名2; 4 類型名

C++學習之 基本數據類型

大成 double mini png 滿足 const case bit 普通 基本數據類型 上期回顧 stdlib.h system,命令release MT導入ico文件 基本數據類型 整數 int浮點型(小數 實型) float double字符型 ch

c++基礎

AC 形式 double類型 轉換成 img TP ret 初始 IT 選擇結構 if語句: if語句的語法形式 if (表達式) 語句 例:if (x > y) cout << x; if (表達式) 語句1 else 語句2 例:if (x >

匯編1

指令 執行 數據信息 12px 區別 方式 發出 產生 直接 要說匯編語言必須要談到機器語言。機器語言是機器指令的集合,簡單來說就是一串二進制的數字,可以直接讓器件工作。 匯編語言的產生是因為機器語言太過繁瑣,且對於編程者而言工作量太大、易出錯,例如書上welcome to

測試流程

【摘要】軟體測試從哪裡開始到哪裡結束?中間經過哪些環節以及各個環節要注意哪些事項。 【關鍵詞】測試流程、需求分析、測試用例、測試計劃、缺陷管理 一、概述   一般而言,軟體測試從專案確立就開始了,前後要經過以下一些主要環節:   需求分析 -> 測試計劃 -> 測試設計 -> 測試環

Docker之進入容器

1、簡介   經過前面兩篇部落格的掃盲,大家多多少少對docker有了一個基本的瞭解,也接觸了docker的常用命令。在這篇部落格中,我將介紹進入docker容器的幾種方式。   2、進入docker中的幾種方式   2.1、使用docker attach命令進入docker   Dock

網路協議DHCP與PXE:IP是怎麼來的,又是怎麼沒的?

如何配置IP地址 使用 net-tools: $ sudo ifconfig eth1 10.0.0.1/24 $ sudo ifconfig eth1 up 使用 iproute2: $ sudo ip addr add 10.0.0.1/24 dev eth1 $

關於強稀釋的影象問題的數學分析

淺談關於強(弱)酸(鹼)稀釋的影象問題的數學分析 比起學術剽竊導圖,窩更期望思維的閃光。——LittlePrincess 吼,話不多說,進入正題 ①等濃度等體積 首先我們知道這樣一個東西

資料採集爬蟲的一些工作經驗

這裡先談談我的學習背景吧,不喜歡可以繞過,純屬自學之路,然後求職之路,沒有任何技術原理。。 學了一個月的python,,可能語法比較簡單的關係,很快就接觸到python爬蟲,一開始我真的很不理解爬蟲是幹什麼的,後來到傳智部落格的官網看了一下python的課程,也發現也有爬蟲的課程,就開始嗑視訊了