STL 問題歸納

2021-09-12 06:34:12 字數 3122 閱讀 2004

特點:變長陣列,一般在元素個數不確定的情況下使用

新增標頭檔案 #include , 以及 using namespace std;

定義:vectorname; 相當於一位陣列 name[size], 只不過其長度可以根據需要進行變化,比較節省空間,「變長陣列」vector 陣列定義:vectorarrayname[arraysize], 即 arrayname 中的每乙個元素都是乙個 vector, arrayname[0] ~ arrayname[arraysize - 1] 中每乙個都是乙個 vector容器,相當於乙個二維陣列, 例如vectorvi[100];

訪問:①通過下標訪問 vi[0], vi[1]... ② 通過迭代器訪問 vector::iterator it = it.begin() ,可以使用 *it 訪問元素,vi[i] 與 *(vi.begin()+i)

push_back(), 在 vector 之後新增乙個元素 x

pop_back(): 刪除vector尾部的元素

size() , 獲取 vector 中元素個數

clear(), 清除vector中的元素

insert(it, x), 向vector的任意迭代器it處插入乙個元素x

erase(it), 刪除迭代器處元素, erase(first, end) 刪除[first, end) 內的所有元素 

特點:自動去重,公升序排序

新增 #include 以及 using namespace std;

定義:setname;

set 陣列的定義和 vector 相同: setarrayname[arraysize], 比如 seta[100];

set 中元素的訪問只能通過迭代器來訪問 set::iterator it; 例如在 for 迴圈中的使用 for(set::iterator it = a[x].begin(); it != a[x].end(); it++)

insert(x) 將 x 插入容器 set 中,並且自動遞增排序和去重

fine(value) 返回 set 中對應值為 value 的迭代器,判斷是否找到 st[y].find(*it) != st[y].end()

erase(): st.erase(it), 刪除迭代器 it 所在的元素; st.erase(value); 刪除值為value;st.erase(first, last) 刪除乙個區間

size() 獲取 set 中元素個數 

clear() 清空

新增 #include 以及 using namespace std;

定義:string str = "abcd";

訪問:下標;迭代器(下標可以完成訪問,但是insert、erase函式要求以迭代器為引數)string::iterator it = str.begin()

+= 拼接字串;==、 <= 等關係運算子按照字典序

str.length() / size()  長度

str1.insert(pos, str2) 在 pos 號位置處插入字串str2;insert(it, it2, it3) 將串[it2, it3) 插在 it 的位置上

erase(it) 刪除單個元素;erase(first, last); erase(pos, length) 刪除以pos為起始的長度為length的串

clear() 清空

substr(pos, len) 返回從 pos 號位開始,長度為 len 的子串

str.find(str2) 當str2是str的子串時,返回str第一次出現的位置;如果不是子串,返回string::npos; str.find(pos, str2) 從pos號位開始匹配str2

str.replace(pos, len, len2) 把str從pos號位開始,長度為len的子串替換為str2; str.replace(it1, it2, str2) 把str的迭代器[it1, it2) 範圍的子串替換為str2

讀入和輸出整個字串,只能用 cin 和 cout

特點:可以將任何型別(包括stl容器)對映到任何基本型別(包括stl容器),同時會以鍵從小到大自動排序

用途:建立字元(字串)與整數之間的對映;大整數或其他資料型別是否存在

新增 #include , using namespce std;

定義:mapmp; 其中 typename1 為鍵(key),typename2 對映後型別 值(value);如果是字串對映時,必須使用string,不可以使用char陣列(因為char作為陣列是不可能作為鍵值的);mapmp;

訪問:通過下標直接訪問 mp['c'] = 20; 迭代器訪問: it->first 訪問鍵, it->second訪問值

find(key) 返回鍵為key的迭代器;找不到mp.find(key) == mp.end()erase(it) 刪除;erase(key) 刪除鍵為key; erase(first, end)

size() 大小

clear() 清空

#include ; usina namespce std;

queueq;

訪問:只能通過front() 和 back() 來訪問隊首、隊尾元素 q.front();

q.push(1); 入隊

q.pop(); 隊首元素出隊

q.empty() == true 隊空

q.size() 大小

特點:隊首元素一定是佇列中優先順序最高的,本質是堆

#include ; usina namespce std;

priority_queuename;

訪問:只能通過 top() 函式來訪問隊首元素,沒有front() 和 back()

q.push(1); 入隊

q.pop(); 出隊

q.empty() == true 隊空

q.size() 大小

優先順序設定:預設priority_queuename; 數字最大、字典序最大的在隊首;定義priority_queue, greater>q;可以最小的放在隊首

#include ; using namespce std;

只能通過top()訪問棧頂元素

push() pop() empty() size()

STL容器和迭代器用法歸納(1)

在我所看到的介紹stl的幾本書和文章裡。開頭總要說stl能節省大量的時間和精力,但很多c 程式設計師確不知道,不會用,或不願意用,因為覺得stl不好理解,不好用,複雜。可能也正如這些書中所說,我也經歷過從不用到用的過程,而我身邊也有人還沒有使用stl。但其實只要我們需要儲存資訊,然後查詢這些資訊並使...

面試問題歸納

1 死鎖問題除錯 2 mmap direct io vs no direct io,dma,3 cpu 排程,如何保證多個執行緒執行在不同的cpu核上 4 tcp協議流程 5 如何進行高併發的socket通訊 開發注意的細節 6 各種訊號 訊號忽略 自定義處理 多執行緒中的訊號處理 7 記憶體管理 ...

物件導向問題歸納

1 什麼是介面?什麼是抽象類?兩者的區別是什麼?聯想 有了抽象類為什麼還要用介面 2 同一類中例項成員和靜態成員的初始化順序,靜態成員和例項成員可以相互訪問嗎?3 封裝 繼承 多型的理解?4 類的直接成員和類的直接變數成員?5 變數的作用域 聯想 同級花括號結束部分 6 類的掃瞄順序 7 拆箱和裝箱...