C 容器和演算法

2021-05-22 17:13:11 字數 2108 閱讀 1841

c++容器和演算法

容器部分:

順序容器:vector deque list -- 通過元素在容器中的位置順序儲存和訪問元素

vector:支援快速隨機訪問---容器介面卡為stack後進先出棧

deque:雙端佇列---容器介面卡為priority_queue有優先順序管理的佇列

list:支援快速插入/刪除---容器介面卡為queue先進先出佇列

關聯容器:map set -- 關聯容器通過鍵(key)儲存和讀取元素

pair型別--#include--pairp1;

map:以鍵-值(key-value)對的形式組織:鍵用作元素在map中的索引,而值則表示所儲存和讀取的資料--關聯陣列,元素通過鍵來儲存和讀取

set:僅包含乙個鍵,並有效地支援關於某個鍵是否存在的查詢--大小可變的集合,支援通過鍵實現的快速讀取

泛型演算法:

實現了共同的操作,所以稱之為「演算法」;而「泛型」指的是它們可以操作在多種容器型別上;泛型演算法本身從不執行容器操作,只是單獨依賴迭代器和迭代器操作實現。

1.#include/ 2.#include

1.find()查詢操作,三個形參,一對迭代器,乙個要查詢的值--返回第一次查詢到該值的迭代器

2.accumulate()累加操作,三個形參,一對迭代器,乙個累加的初值並給出返回的型別--返回累加的值

1.fill()賦值操作,三個形參,一對迭代器,乙個所要賦值的值

1.fill_n()賦值操作,乙個迭代器,乙個計數器,乙個值

1.back_inserter()插入迭代器,可以給基礎容器新增元素的迭代器#include

1.copy()複製操作,三個引數,一對迭代器,乙個儲存複製元素的容器

1.replace()替換操作,四個引數,一對迭代器,兩個值

1.replace_copy()不改變原序列的替換操作,五個引數,一對迭代器,乙個容器,兩個值

1.sort()字典排序操作,兩個形參,一對迭代器

1.unique()刪除相鄰的重複元素,並返回乙個迭代器,表示無重複的值範圍的結束

1.erase()刪除操作,兩個形參,一對迭代器

謂詞(predicate):做某些檢測的還書,返回用於條件判斷的型別,指出條件是否成立。

1.stable_sort()按長度大小排序,而長度相同的單詞仍保持字典順序,三個引數,一對迭代器,乙個謂詞--比較長度大小的

1.count_if()統計符合謂詞的操作,三個形參,一對迭代器,乙個謂詞

迭代器:#include

(1)插入迭代器(insert iterator)--與容器繫結在一起,實現在容器中插入元素的功能

back_inserter:建立使用push_back實現插入的迭代器

front_inserter:建立使用push_front實現插入的迭代器

inserter:隨意插入,需要指定插入位置,總是在它的迭代器實參所標明的位置前面插入新元素

(2)isotream迭代器(iostream iterator)--與輸入或輸出流繫結在一起,用於迭代遍歷所關聯的io流

istream_iteratorin(strm)      建立從輸入流strm中讀取t型別物件的istream_iterator物件

istream_iteratorin            建立超出末端迭代器的istream_iterator物件

ostream_iteratorin(strm)      建立將t型別的物件寫到輸出流strm的ostream_iterator物件

ostream_iteratorin(strm, delim) 同上,在寫入過程中使用delim作為元素的分隔符

流迭代器都是類模板:任何已定義輸入操作符(>>操作符)的型別都可以定義istream_iterator,輸出同理。

注:ostream_iterator物件必須與特定的流繫結在一起

(3)反向迭代器(reverse iterator)--向後遍歷rbegin和rend

例:降序排列vector,對sort傳遞一對反向迭代器:sort(vec.rbegin, vec.rend)

(4)const_iterator(不需要iterator標頭檔案):這樣定義是不希望使用這個迭代器來修改容器中的元素

容器特有的演算法:

list容器

C 容器和演算法

1.map和set有什麼區別,分別又是怎麼實現的?2.stl的allocator?c 容器的空間配置器,由兩級分配器構成,大於128位元組,呼叫一級配置器,malloc free,realloc 小於128位元組,預設二級配置器,分配記憶體池。為了便於記憶體管理,減少記憶體碎片產生 3.stl 標準...

C 基礎 容器和演算法

1 map和set有什麼區別,怎麼是寫的 都是關聯容器,底層實現都是紅黑樹 區別在於 2 介紹一下stl的allocator stl的分配器用於封裝stl容器在記憶體管理上的底層細節在c 中,其記憶體配置和釋放如下 new運算分兩個階段 1 呼叫 operator new配置記憶體 2 呼叫物件建構...

容器和演算法

在我們編寫每乙個程式時,都會或多或少的需要儲存一些資料,而c 在這方面只提供了幾種最基本的方法,我們可以建立區域性變數或者全域性變數在存放某個值,也可以用陣列來存放多個值。陣列是c 唯一支援的容器,但陣列並不適合用來解決所有的問題 假如我們編寫乙個程式 輸入一串字母,判斷與給定單詞是否一樣。這時候我...