C 標準庫及其相關函式

2021-10-07 22:03:51 字數 4151 閱讀 1503

·standard template library(stl)

·標準版模板庫stl包含常用演算法和資料結構的通用庫

·stl的核心內容是3個基本元件:

·容器·演算法

·迭代器

容器

·向量vector

·線性表list

·佇列queue

·對映map

·集合set

·字串string

常用演算法

排序 sort()

查詢 find()

替換 replace()

合併 merge()

反序 reverse()

統計 count()

迭代器

iterator

·向量是乙個容量可變的順序容器,順序容器中的元素嚴格按照線性順序存放。可以通過下標隨機訪問對應的元素。

·向量vector類可用來支援動態陣列,動態陣列是指可以根據需要自動改變大小的陣列。

vector類物件的宣告:

vector <

int> iv;

vector <

double

>dv(

5);vector <

char

>cv(

5);vector

sv2(8)

;

例子1

vector <

char

> v;

//建立乙個長度為零的向量

int i;

//將10個字母存放到向量物件v中

for(i=

0; i<

10; i++

) v.

push_back

('a'

+i);

//採用下標訪問向量中的內容

for(i=

0; i<

10; i++

) cout<

<<

" "

;cout<

//通過迭代器訪問向量中的內容

vector <

char

>

:: iterator p=v.

begin()

;while

(p!=v.

end())

例子2

#include

#include

#include

#include

using

namespace std;

void

load

(vector&)

;void

print

(vector);

const

int size=8;

intmain()

void

load

(vector

& v)

//用下標的方式給vector向量進行賦值

void

print

(vector v)

//列印輸出vector向量內容

標準庫中的函式模板sort()

template

<

class

randlter

>

void

sort

(randlter start, randlter end)

;template

<

class

randlter

,class

comp

>

void

sort

(randlter start, randlter end, comp cmpfn)

;//可實現公升序排序或者降序排序

·線性表list類定義了雙向的線性表,又可稱為雙向鍊錶。list類只支援順序訪問。示例

#include

#include

#include

using

namespace std;

intmain()

cout<

lst.

sort()

;//對線性表list進行排序

cout<<

"sorted contents: "

;//排序之後的內容

p=lst.

begin()

;while

(p!=lst.

end())

cout<

return0;

}

·佇列(queue)是乙個先進先出(fifo)的資料結構,在程式設計中經常使用。

·佇列常用的操作有,在佇列尾增加乙個元素、在佇列頭取乙個元素以及測試佇列是否為空、是否為滿等操作。

示例

#include

#include

#include

using

namespace std;

intmain()

stl中的集合容器與數學中的集合概念有些相似。

stl的集合容器是乙個有序容器。

示例

#include

#include

#include

using

namespace std;

intmain()

set::iterator at=source.

begin()

; cout<

while

(at!=source.

end())

//輸出的字串為排序後的字串,且重複字串只儲存乙個

cout<<

*at++

<

}

set集合容器通常採用平衡二叉樹實現,在插入元素時,它能自動調整二叉樹的排序,把該元素放到適當的位置。

以確保每個子樹根節點的鍵值大於左子樹所有節點的鍵值,而小於右子樹的鍵值。

另外,還得確保左子樹的高度與右子樹的高度相等,這樣,二叉樹的高度最小,從而檢索速度最快。

set容器中,在插入元素時,就會自動將元素按照鍵值由小到大的順序排序。

平衡二叉檢索樹的檢索使用中序遍歷演算法,檢索效率高於vector、deque和list等容器。

構造set集合容器的主要目的就是為了快速檢索

set與multiset的區別

multiset

可以插入完全相同的兩條記錄

會提高資料插入的速度

set不可以插入完全相同的兩條記錄

保證記錄的唯一性

由於需要查重處理,會降低資料插入的速度

可以作為一種去重的方法

對映map類定義了乙個關聯容器,並且在容器中使用唯一的關鍵字來對映相應的值。

map類物件是一系列關鍵字/值的匹配對。

map的功能在於:只要知道了乙個值的關鍵字,就可以找到這個值。

每個節點都是關鍵字key和值value的匹配對。

示例

#include

#include

#include

using

namespace std;

intmain()

C 標準庫之queue(各函式及其使用全)

一 fifo佇列,即先入先出佇列 1.佇列的宣告 std deque mydeck 3,100 deque with 3 elements std list mylist 2,200 list with 2 elements std queue first empty queue std queue...

C 標準庫型別 bitset及其應用

bitset 物件用每乙個bit位儲存0或1,可以用來標記存在或者不存在,位置下標和儲存內容組成乙個key value對。用bit標記的好處就是可以節省記憶體空間,特別是應用於海量資料處理中。例如以下幾個問題 1 已知某個檔案內包含一些 號碼,每個號碼為8位數字,統計不同號碼的個數 2 2.5億個整...

C 標準庫bind函式

上篇部落格在為大家介紹lambda是先由find if函式引入問題,由於find if函式的第三個引數所要求的可呼叫物件只能由乙個謂詞,所以我們最後選擇的解決方法是用lambda表示式。那麼此問題還有其他的解決方法麼?本篇部落格我就為大家帶來新的解決方法bind函式 bind函式的最根本的作用就是可...