參考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...