1. 程式人生 > >C++常用容器總結

C++常用容器總結

C++中的容器大致可以分為兩個大類:順序容器和關聯容器。順序容器中有包含有順序容器介面卡。

順序容器:將單一型別元素聚集起來成為容器,然後根據位置來儲存和訪問這些元素。主要有vector、list、deque(雙端佇列)。順序容器介面卡:stack、queue和priority_queue。

關聯容器:支援通過鍵來高效地查詢和讀取元素。主要有:pair、set、map、multiset和multimap。

接下來依次對於各種容器做詳細的介紹。

一、順序容器

1、順序容器定義

為了定義一個容器型別的物件,必須先包含相關的標頭檔案:

   定義vector:#include <vector>

   定義list:#include <list>

   定義deque:#include <deque>

定義示例

1 2 3 vector<int> vi; list<int> li; deque<int> di;

2、順序容器初始化

函式模板 意義

C<T> c;

建立一個名為c的空容器。C是容器型別名,如vector,T是元素型別,如int或

string適用於所有容器。

C c(c2);

建立容器c2的副本c;c和c2必須具有相同的容器型別,並存放相同型別的元素。適用於所有容器。

C c(b,e);

建立c,其元素是迭代器b和e標示的範圍內元素的副本。

適用於所有容器。

C c(n,t);

用n個值為t的元素建立容器c,其中值t必須是容器型別C的元素型別的值,或者是可轉換為該型別的值。

只適用於順序容器

C c(n);

建立有 n 個值初始化元素的容器 c。

只適用於順序容器

初始化示例:

1 2 3 4 5 6 7 8 9 10 //初始化為一個容器的副本 vector<int> vi; vector<int> vi2(vi); //利用vi來初始化vi2 //初始化為一段元素的副本 char*words[] = {"stately""plump""buck""mulligan"}; size_twords_size = sizeof(words)/sizeof(char*); list<string> words2(words, words + words_size); //分配和初始化指定數目的元素 constlist<int>::size_type list_size = 64; list<string> slist(list_size, "a"); // 64 strings, each is a

3、順序容器支援的指標運算

①所有順序都支援的指標執行

表示式 意義
*iter

返回迭代器 iter 所指向的元素的引用

iter->mem

對iter進行解引用,獲取指定元素中名為mem的成員。等效於(*iter).mem

++iter

iter++

給 iter 加 1,使其指向容器裡的下一個元素

--iter

iter--

給 iter 減 1,使其指向容器裡的前一個元素

iter==iter2

iter1!=iter2

比較兩個迭代器是否相等(或不等)。當兩個迭代器指向同一個

容器中的同一個元素,或者當它們都指向同一個容器的超出末端

的下一位置時,兩個迭代器相等

vector 和 deque 容器的迭代器提供額外的運算

表示式 意義

iter + n

iter - n

在迭代器上加(減)整數值 n,將產生指向容器中前面(後面)第 n

個元素的迭代器。新計算出來的迭代器必須指向容器中的元素或超出

容器末端的下一位置

iter1+=iter2

iter1-=iter2

這裡迭代器加減法的複合賦值運算:將 iter1 加上或減去 iter2 的

運算結果賦給 iter1

iter1 -

iter2

兩個迭代器的減法,其運算結果加上右邊的迭代器即得左邊的迭代

器。這兩個迭代器必須指向同一個容器中的元素或超出容器末端的下

一位置

>, >=,

<, <=

迭代器的關係操作符。當一個迭代器指向的元素在容器中位於另一個

迭代器指向的元素之前,則前一個迭代器小於後一個迭代器。關係操

作符的兩個迭代器必須指向同一個容器中的元素或超出容器末端的

下一位置

③迭代器失效:一些容器操作會修改容器的內在狀態或移動容器內的元素。這樣的操作使所有指向被移動的元素的迭代器失效,也可能同時使其他迭代器失效。使用無效迭代器是沒有定義的,可能會導致與懸垂指標相同的問題。

相關推薦

C++常用容器總結

C++中的容器大致可以分為兩個大類:順序容器和關聯容器。順序容器中有包含有順序容器介面卡。 順序容器:將單一型別元素聚集起來成為容器,然後根據位置來儲存和訪問這些元素。主要有vector、list、deque(雙端佇列)。順序容器介面卡:stack、queue和

C++】STL常用容器總結之十二:string類

13、string類 宣告 string類本不是STL的容器,但是它與STL容器有著很多相似的操作,因此,把string放在這裡一起進行介紹。 之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必擔心記憶體是

C++】STL常用容器總結之四:連結串列list

5、連結串列list List是每個節點包含前驅指標、後繼指標和資料域三個部分的雙向連結串列。List不提供隨機存取,訪問元素需要按順序走到需存取的元素,時間複雜度為O(n),在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。

C++】STL常用容器總結之八:對映map

9、對映map Map是鍵-值對的集合,map中的所有元素都是pair,可以使用鍵作為下標來獲取一個值。Map中所有元素都會根據元素的值自動被排序,同時擁有實值value和鍵值key,pair的第一元素被視為鍵值,第二元素被視為實值,同時map不允許兩個元素有

C++】STL常用容器總結之五:雙端佇列deque

6、雙端佇列deque 所謂的deque是”double ended queue”的縮寫,雙端佇列不論在尾部或頭部插入元素,都十分迅速。而在中間插入元素則會比較費時,因為必須移動中間其他的元素。雙端佇列是一種隨機訪問的資料型別,提供了在序列兩端快速插入和刪除操

C++】STL常用容器總結之九:集合set

10、集合set Map容器是鍵值對的集合,而set容器只是單純的鍵的集合,當只想知道一個值是否存在時,使用set容器是最合適的。在set中,所有元素都會根據其鍵值被自動排序,同時set中不允許兩個元素有相同的鍵值。 1、set容器的一些操作 Set容

C++】STL常用容器總結之一:容器與迭代器

宣告: 1、本博文主要整理自《C++ Primer》和《STL原始碼剖析》這兩本經典書籍。同時,也參考了網路中不少優秀部落格,對這些部落格的作者表示感謝。 2、由於博主能力有限,對於一些容器的用法可能尚未進行深入研究。因此,本博文若有錯誤和不足之處,歡迎大家

C++】STL常用容器總結之十一:容器小結

12、容器小結 1、容器的選用 Vector和deque容器提供了對元素的快速訪問,但付出的代價是,在容器的任意位置插入或刪除元素,比在容器尾部插入和刪除的開銷更大,因為要保證其連續儲存,需要移動元素;list型別在任何位置都能快速插入和刪除,因為不需要

STL常用容器總結——stack棧

原文 棧中的資料是先進後出(FILO),棧只有一個出口,新增和移除元素都只能在棧頂操作。在STL中,棧是以別的容器作為底部結構,修改介面使其符合棧的特性。預設情況下,棧使用deque作為其底層資料結構,也可以指定使用vector或list等。 棧常用的函式有: 1.資料操作

C/C++STL常用容器用法總結

一、容器概念:容器是儲存其他物件的物件。被儲存的物件必須是同一型別。基本特徵:以下用X表示容器型別(後面會講到),T表示儲存的物件型別(如int);a和b表示為型別X的值;u表示為一個X容器的識別符號(

C# Winform 跨線程更新UI控件常用方法總結(轉)

sum tex ase adc 而是 this obj 出現 turn 出處:http://www.tuicool.com/articles/FNzURb 概述 C#Winform編程中,跨線程直接更新UI控件的做法是不正確的,會時常出現“線程間操作無效: 從不是創建控件的

C# 文件操作常用方法總結

arch 擴展 追加 內容 cto 源文件 pen only lin 需引用  System.IO Path為絕對路徑 檢測指定目錄是否存在  Directory.Exists(Path) 創建目錄  Directory.CreateDirectory(Path

C#編程常用工具總結

internal ocs explore 編譯工具 microsoft bsp 運行 nds 下載地址 1.SysinternalsSuite 套裝包   下載地址:https://docs.microsoft.com/zh-cn/sysinternals/down

C++順序容器知識總結

交換 prior 效率 導致 獲取 tac pos stack empty   容器是一種容納特定類型對象的集合。C++的容器可以分為兩類:順序容器和關聯容器。順序容器的元素排列和元素值大小無關,而是由元素添加到容器中的次序決定的。標準庫定義了三種順序容器的類型:vecto

c語言數組常用知識點總結

地址 char 就是 c語言 AI 常用 一個 如果 涵蓋 做這個總結的宗旨是夠用就好,所以目前只總結了一維數組的部分,這些運用幾乎涵蓋了我目前碰到的全部問題,以後遇到其他問題再做添加 一.一維數組1. 初始化方法第一種:完全初始化。依次賦值 如:a[5] = {2,3,

C++ 知識回顧總結 -- queue 佇列容器

一、說明 queue 是一種佇列介面卡,專門設計用於FIFO中操作(先進先出),元素從一端插入容器並從另一端提取。 相關API地址為:http://www.cplusplus.com/reference/queue/queue/ 二、使用方法 在C++中只要#include<queue>即

『OI常用c++STL容器及函式』

·vector ·queue ·priority_queue ·deque ·set ·map ·stack ·sort ·upper_bound,lower_bound,binary_search <更新提示> <第一次更新>

C++常用容器(vector、set、list、map)

C++ STL中最基本以及最常用的類或容器無非就是以下幾個: string vector set list map 下面就依次介紹它們,並給出一些最常見的最實用的使用方法,做到快速入門。 string 首先看看我們C語言一般怎麼使用字串的 c

C#機房合作控制元件常用屬性總結

 機房合作  合作中,我在U層經常會對一些控制元件進行設定。窗體不少,反反覆覆,有點不好找的屬性總是那幾個,遂記錄下來,成此部落格~   需求 || 屬性 <1>如何讓控制元件不能編輯 textbox

C++STL幾種常用容器簡要歸納

本文參考李煜東《演算法競賽進階指南》,筆者作歸納總結。 本文將簡要介紹STL中vector,queue,priority_queue,deque,set,multiset,map,bitset八種容器及其操作方法。 vector 使用此容器需在程式前加上標頭檔