string
string s 定義
s.length() / s.size() 字串長度
s.insert(pos,s2) $ pos $ 位置插入 $ s2 $
s.erase(a,b) 從 $ s $ 的下標 $ a $ 開始洗掉 $ b $ 個元素
s.push_back(x) 尾部插入元素 $ x $
s.find(s2,pos) 在 $ s $ 的下標 $ pos $ 起查找 $ s2 $ 第一次出現的位置
s.substr(pos,n) 回傳從 $ s $ 的下標 $ pos $ 起的 $ n $ 個字符
s.replace(pos,n,s2) $ s $ 的下標 $ pos $ 起的 $ n $ 個字符換成 $ s2 $ 的內容
vector
vector<int> v 定義
v[100] 隨機訪問
v.push_back() 向尾部壓入元素
v.pop_back() 洗掉尾部元素
v.size() 內部元素個數
v.empty() 判斷是否為空
v.insert() 任意位置插入元素
v.erase() 任意位置洗掉元素
v.front() 訪問第一個元素
v.back() 訪問最后一個元素
v.begin() 迭代器,指向初始元素
v.end() 迭代器,指向尾部元素之后
v.clear() 清空內部元素,但不會釋放空間
佇列
queue<int> q 定義
q.push() 壓入隊尾
q.front() 查詢隊首
q.pop() 彈出隊首
q.size() 佇列內部元素個數
q.empty() 判斷是否為空
堆疊
stack<int> s 定義
s.empty()如果堆疊空則回傳真
s.push() 壓入堆疊頂
s.top() 查詢堆疊頂
s.pop() 彈出堆疊頂
s.size() 堆疊內部元素個數
set
set<int> st 定義
st.insert(x) 將 $ x $ 插入如 set 容器 $ st $ 中
st.begin() 回傳 set 容器第一個元素的迭代器
st.end() 回傳一個指向當前 set 末尾元素的下一位置的迭代器.
st.find(x) 回傳給定值值得定位器,如果沒找到則回傳end(),
st.clear() 洗掉 set 容器中的所有的元素
st.empty() 判斷 set 容器是否為空
st.size() 回傳當前 set 容器中的元素個數
st.rbegin() 回傳的值和end()相同(反向迭代器)
st.rend() 回傳的值和begin()相同
st.max_size() 回傳 set 容器可能包含的元素最大個數
st.erase(x) 洗掉 set 中對應值為 $ x $ 的迭代器
st.erase(x,y) 洗掉 set 中對應值為 $ x-y $ 的迭代器
inset(first,second) 將定位器 $ first $ 到 $ second $ 之間的元素插入到 set 中
關于 set 的幾個問題
-
為何 map 和 set 的插入洗掉效率比用其他序列容器高?
因為對于關聯容器來說,不需要做記憶體拷貝和記憶體移動,
set 容器內所有元素都是以節點的方式來存盤,其節點結構和鏈表差不多,指向父節點和子節點,
-
為何每次 insert 之后,以前保存的 iterator 不會失效?
iterator這里就相當于指向節點的指標,記憶體沒有變,指向記憶體的指標不會失效呢(當然被洗掉的那個元素本身已經失效了),
-
當資料元素增多時,set 的插入和搜索速度變化如何?
如果你知道 log2 的關系你應該就徹底了解這個答案,在 set 中查找是使用二分查找,也就是說,如果有 16 個元素,最多需要比較 4 次就能找到結果,有 32 個元素,最多比較 5 次,那么有 10000 個呢?最多比較的次數為 log10000,最多為 14 次,如果是 20000 個元素呢?最多不過 15 次,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/423801.html
標籤:其他
