今晚參加訓練。。。樹狀陣列的練習,傻乎乎的用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...