常用庫函式及STL自我彙總(待完善)

2022-08-22 03:03:11 字數 1731 閱讀 1911

參考runoob.com,《演算法競賽高階指南》,

最近在做一些csp題目的時候,發現對stl和庫函式中的很多東西不太熟悉,所以通過自我總結來複習鞏固知識。

注意事項:

[1]:是一種能夠存放任意型別的動態陣列,完全可以替代普通陣列,支援隨機訪問;

[2]:順序容器,並非鍊錶,不支援在任意位置o(1)插入元素,元素增刪一般在容器末尾進行。

宣告:

// 1. 建立空vector; 常數複雜度

vectorv0;

// 2. 建立乙個初始空間為3的vector,其元素的預設值是0; 線性複雜度

vectorv1(3);

// 3. 建立乙個初始空間為3的vector,其元素的預設值是2; 線性複雜度

vectorv2(3, 2);

// 4. 建立乙個初始空間為3的vector,其元素的預設值是1,

// 並且使用v2的空間配置器; 線性複雜度

vectorv3(3, 1, v2.get_allocator());

// 5. 建立乙個v2的拷貝vector v4, 其內容元素和v2一樣; 線性複雜度

vectorv4(v2);

// 6. 建立乙個v4的拷貝vector v5,其內容是; 線性複雜度

vectorv5(v4.begin() + 1, v4.begin() + 3);

// 7. 移動v2到新建立的vector v6,不發生拷貝; 常數複雜度; 需要 c++11

vectorv6(std::move(v2)); // 或者 v6 = std::move(v2);

// 8. 建立乙個ve,其內容是mapmp的所有元素

vector>ve(mp.begin(),mp.end());

// 9. 建立乙個二維陣列,其中第一維長度為n,第二維長度為m

vector> ve(n,vector(m));

常用方法:

元素訪問:

reference operator:ve[x]訪問ve中下標為x的引用,不執行越界檢查

reference v.front():返回首元素的引用,可以直接在對首元素進行修改,比如v.front()*=2;

reference v.back():返回尾元素的引用

iterator v.begin():返回向量頭指標,指向第乙個元素

iterator v.begin():返回向量尾指標,指向向量最後乙個元素的下乙個位置

bool empty(),int size():分別判斷是否為空和返回向量中元素的個數

v.clear():清除所有元素

v.push_back():在末尾插入元素:由於vector是順序容器,要在末尾進行元素的新增和刪除,所以有個_back(),注意區別

v.pop_back():刪除末尾元素

注意事項:

[1],array是記憶體連續的,固定長度的資料結構,本質是對原生陣列的直接封裝。

宣告:

//定義長度為3內容為,型別為int的陣列

arraya;

常用方法:

1.a.front():返回第乙個元素

2.a.back():返回最後乙個元素

標頭檔案:#include

使用方法:

1.對容器內元素累加求和:

int sum=accumulate(v.begin(),b.end(),0);

2.對容器內元素進行自定義處理:

deque的STL常用庫函式

雙向佇列基本的庫函式 是一種優化了的 對序列兩端元素進行新增和刪除操作的基本序列容器。它允許較為快速地隨機訪問,但它不像vector 把所有的物件儲存在一塊連續的記憶體塊,而是採用多個連續的儲存塊,並且在乙個對映結構中儲存對這些塊及其順序的跟蹤。向deque 兩端新增或刪除元素的開銷很小。它不需要重...

c 常用的庫函式 stl

1.通用std find 函式 std find函式的確有很好的通用性,但是也有很大的缺點,就是演算法的效率不高,演算法的複雜度為o n 2.特定容器的find 函式 當資料量是百萬或者千萬級的時候,std find的o n 演算法就讓程式感到銷魂了。這時候我們可以考慮使用map或者set的演算法。...

常用庫函式及標頭檔案

1.排序 sort a,b,c 標頭檔案 include 2.字串與整實型轉換 一 string轉int a int變數 atoi b string變數 c str 標頭檔案 include 二 string轉float a float變數 atof b string變數 c str 標頭檔案 in...