C STL庫用法例項

2021-10-19 06:41:42 字數 3303 閱讀 8359

你還在擔心不會用auto寫for迴圈嗎?

你還在擔心map不會用嗎?

你還在為stl的各種庫不會用而苦惱嗎?

相信我,看了這篇文。。

。你依然不會!

題目傳送門—>cf977b two-gram

題目描述:

給你乙個字串,找出現次數最多的長度為2的子串。

輸入樣例:

7abacaba

輸出樣例:

ab這道題可以作為c++ stl庫的優質練手題

1.auto的迴圈遍歷

for(auto x : range)

建立拷貝,無法修改range中的元素

for(auto& x : range)

可以修改range中的元素,但一般用這種for(auto&& x : range)

for(const auto & x : range)

唯讀range中的元素

2.string中擷取字串

ss.substr(i,k):

這個的意思就是從i開始擷取以k為單位長度的乙個字串,k指代的是長度。

ss.c_str():

這個就是將string字串轉化成為c的字串陣列,而c_str();則是生成乙個const char*型別的指標,指向字串的首位址

#include

#include

#include

using

namespace std;

intmain()

不妨可以試試.

#include

#include

#include

#include

using

namespace std;

intmain()

//遍歷陣列

ans=ss.

substr(0

,2);

for(

auto

&&i:f)

} cout

}

如果map這麼定義:map < string , map < string , int > >

那麼應該:

for(auto&&p:m)

for(auto&&p2:p.second)

下面一道題是關於set的用法

題目傳送門—>cf620c pearls in a row

現在有n個數,你的任務是將這n個數盡可能切割成多段。每一段必須包括兩個相同的數。

資料輸入量比較大,建議使用scanf和printf。

input 單組測試資料。資料第一行為n(1 ≤ n ≤ 3·105) 。

資料的第二行包括n個數ai(1 ≤ ai ≤ 109) 。

output 輸出的第一行為盡可能切割的最大段數k。

接下來k行,每行為兩個整數lj, rj (1 ≤ lj ≤ rj ≤ n) ,表示切割的區間範圍

如果存在多個合法的切割方法,輸出任意乙個即可。

如果不能切割成合法的情況,輸出"-1".

這道題涉及一小部分貪心

首先講一下set:

#include

//標頭檔案

set <

int> st//定義set,我喜歡用st命名

set.

insert

(a)//插入資料

set.

count

(a)//查詢資料是否出現

set.

clear()

//清空

快讀模板

inline

intread()

while

(ch>=

'0'&& ch<=

'9')

return x*f;

}

這道題的思路就是用set找到相同的數字了以後就把這個區間切開,但是本道題**實現相對來說很巧妙,下面請看。

#include

#include

using

namespace std;

set<

int>p;

int l[

1010102

],r[

1010212];

int a[

1021021];

inline

intread()

while

(ch>=

'0'&& ch<=

'9')

return x*f;

}//快讀,常數優化大佬中的大佬,不會的趕緊學一下吧!

intmain()

else p.

insert

(a[i]);

/*if(p.count(a[i])==1)else p.insert(a[i]); **/

///這個是錯的!注釋的部分和答案不一樣的地方在於//}

r[u]

=n;//這個是精髓之處

//比方說1 2 2 2 2 1 3 本來r[1]=6,但是為了讓最後的數字包括上

//就自動賦值讓r[1]=7

if(u==0)

else}}

return0;

}

priority_queue c++ stl庫中的優先佇列

標頭檔案:#include 和普通的queue不一樣的地方在於:可以自定義資料的優先順序(權重),讓權重高的排在佇列的前方,優先出隊。本質上是堆的乙個實現。

定義:priority_queue

type 就是資料型別,container 就是容器型別(container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list。stl裡面預設用的是vector),functional 就是比較的方式。

當需要用自定義的資料型別時才需要傳入這三個引數,使用基本資料型別時,只需要傳入資料型別,預設是大頂堆。

//公升序佇列,小頂堆(從小到大輸出)

priority_queue q;

//降序佇列,大頂堆 (從大到小輸出)

priority_queue q;

//greater和less是std實現的兩個仿函式(就是使乙個類的使用看上去像乙個函式。其實現就是類中實現乙個operator(),這個類就有了類似函式的行為,就是乙個仿函式類了)

C STL庫中sort函式用法

首先sort函式因為它使用的排序方法是類似於快排的方法,時間複雜度為n log2 n 執行效率較高。所以一般資料量很大的資料排序都可以用它來進行。1 sort 函式的標頭檔案為 include 2 sort函式有三個引數 第乙個是要排序的陣列的起始位址。第二個是結束位址 最後一位要排序的位址 第三個...

bitset用法及應用(C STL庫)

include bitset b b有n位,每位都為0 bitset b u b是unsigned long型u的乙個副本 bitset b s b是string物件s中含有的位串的副本 bitset b s,pos,n b是s中位置pos開始的n個位的副本 eg.1 bitset 8 b 輸出b ...

C STL 用法簡介

感覺類似python的字典 需要 include 定義是map m 如 map mapstudent int 是 key,string是value 是乙個對映關係,可以使用key通過下標訪問,訪問其中的元素。定義了三種型別,插入鍵值對的插入規則 第一種就是直接通過下標插入 mapstudent ke...