關於STL 的那些事

2021-07-25 10:17:34 字數 1684 閱讀 2817

今晚參加訓練。。。樹狀陣列的練習,傻乎乎的用stl做了一晚,雖然題沒做出來,不過對stl的查詢有了更深一層的理解。

關於stl。

輸入輸出

vector push_back pop_back

stack push pop

queue

push pop

頭:front() 尾 back()

priority_queue

push pop

頭 top 沒有尾

list

push_back push_front pop_back pop_front 頭:front begin 尾 back end 不過back是最後乙個元素的迭代器 而end是最後乙個元素的下乙個迭代器 l.erase(迭代器) l.reverse() l.sort(cmp) 可自定義cmp,remove(鍵值),erase(迭代器)。

set 裡面元素已經排序而且不接受重複元素

multiset 接受重複元素 insert插入 m.find(值)返回迭代器 remove(值)。

deque 雙向佇列(一般用deque而不用queue)雙向輸入 push_back push_front

string 的查詢 str.find(str,index) 返回index開始 第一次出現str的位置

刪除排序後的重複字元。str.erase(unique(str.begin(),str.end()),str.end());

關於stl的查詢

查詢有三種,即點線面:

點就是查詢目標為單個元素;

線就是查詢目標為區間;

面就是查詢目標為集合;

查詢點 find(迭代器頭,迭代器尾,要找的元素)

find包含在 algorithm 的標頭檔案

count(迭代器頭,迭代器尾,要找的元素)數數

但是在map裡面可以用 mp.count(下標的值)進行數下標。

lower_bound(迭代器頭,迭代器尾,要找的元素)

返回第乙個不小於給定元素的迭代器。

binary_search() 有序區間的二分查詢

返回的是布林型別

search() 查詢子區間首次出現的位置

find()用來查詢單個元素,search()則用來查詢乙個子區間;

示例:從myvector中查詢出現子區間[20,30]的位置:

int needle1 = ;

it = std::search (myvector.begin(), myvector.end(), needle1, needle1+2);

if (it!=myvector.end())

std::cout << 「needle1 found at position 」 << (it-myvector.begin()) << 『\n』;

一般容器查詢 找不到的話都是最後乙個迭代器 即==end(),棧和佇列沒有end()所以這樣找無法確定是否找到了。

string 裡面find查詢 str.find(字串) 找不到 返回 string::npos,

陣列裡面的查詢 要得到下標的話請減去首位址 int pos=lower_bound(a,a+n,x)-a; 因為這裡lower_bound 返回的是位址

既然是佇列,也就只有入隊、出隊、判空、大小的操作,並不具備查詢功能。佇列不具備查詢功能

關於開始的那些事

人總是有惰性的,當然我自己深有體會。一直有個想法想寫寫自己的blog,但隨時間的推移,很久都沒付出行動。最近工作專案開始不那麼忙了,維護乙份自己的blog的想法愈發強烈了。想把自己的一些想法,或者看到的一些有用的東西給大家分享,也給自己留下成長的痕跡。我從小喜歡看書,各種各樣的書屬於不求甚解的狀態。...

關於coredump的那些事

今天在網上搜了一些有關coredump的知識,簡單記一下,以防忘記 core dump檔名的模式儲存在 proc sys kernel core pattern中,預設是core 主要是今天比較鬱悶,要除錯程式crash,就用ulimit c unlimited設定了一下core檔案的大小,但是測試...

關於快取的那些事

cookie的缺陷是非常明顯的 1.資料大小 作為儲存容器,cookie的大小限制在4kb左右這是非常坑爹的,尤其對於現在複雜的業務邏輯需求,4kb的容量除了儲存一些配置欄位還簡單單值資訊,對於絕大部分開發者來說真的不知指望什麼了。2.安全性問題 由於在http請求中的cookie是明文傳遞的 ht...