STL在ACM競賽中的使用

2021-06-28 15:17:32 字數 4103 閱讀 3297

string類具有的優點:可以直接用四則運算符和關係運算子,簡化了字串型別的操作。

[cpp]view plain

copy

print?

string string1=

"22"

,string2=

"11"

;  string1+=string2;    //類似於strcat

intlength=string1.length();   

//類似於strlen,也可以用string.size();

bool

judge=string1>string2;    

//類類似於strcmp

小紫書中例**詳解:

[cpp]view plain

copy

print?

#include

#include

#include

using

namespace

std;  

intmain(

void

)  return

0;  

}  

2.模板:

模板是為了,使類或者函式具有通用型,不僅限於一種資料型別或者一種成員結構。

現定義乙個可以任意交換型別的模板(注意模板只能在全域性或者命名空間內定義,不可以在main函式或者自定義函式內定義。)

[cpp]view plain

copy

print?

template

<

class

&t>    

//class為固定關鍵字,也可以用等效的typename.

void

swap1(t &a,t &b)  

3. 容器vector:

[cpp]view plain

copy

print?

vector<

int> v;  

v.begin();   //容器的起始位置

v.end();    //容器最後乙個位置

v.front();v.back();   //返回第乙個元素(最後乙個元素,但不判斷時候存在

v.empty();    //返回是否容器為空

v.clear();    //清空容器

v.erase(m);    //刪除m位置的資料,並返回下乙個資料的位址(m是迭代器)

v.erase(m,n);     //刪除m到n之間的資料,並返回下乙個資料的位址

v.push_back(element);    //壓入乙個元素到末端

v.pop_back();    //彈出最後乙個元素

v.reserve(100);v.resize(101);    //resize已經建立空間如果再v.push_back();空間就會到101,而reserve只是預留空間並沒有真正建立,v.push_back();只是在第1位

v.size();v.capacity();       //size表示的是已經建立的空間大小也可以表示元素個數可用v的形式直接訪問,capacity容器容量,是預留空間並沒有實際建立

swap(a,b);      //交換兩個元素的位置如:swap(v[0],v[1]);

vector>  v(10);    

//建立乙個前十個元素為int的容器

vectorv(10,string("i"

));  

//使容器的前10個元素都為string型,並且都初始化為i

vectorv1(v2);    //對於已經存在的v2建立乙個v1副本

v.insert(place,element);  

v.insert(place,n,element);     //在place(迭代器)位插入n個元素

注:對vector元素的訪問可以用類似c語言的v,但是最好用v.at(),它會檢查是否越界更安全  

總結:vector即具有陣列的特性由增加了一些功能十分好,簡化**的函式,還可以通過原生的v.push_back()動態增加長度,十分好用。

4.集合set(特點是不會存在有重複的元素):

[cpp]view plain

copy

print?

#include

set> s;     

//建立乙個整型集合:s

s.insert(element);     //插入乙個元素,並會自動排序(在沒有自定義的情況下,預設公升序排列)

s.size();     //當前容器中元素個數

copy(s.begin(), s.end(), ostream_iterator(cout, "\n"

));    

//#include中的函式:輸出全部集合中的元素,並在每個元素後面接換行符

5.對映map(關聯容器):

[cpp]view plain

copy

print?

#include

mapint

> map1;    

//建立乙個map型別,健(key)為string型,值(value)為int型。是健到值得一種對映。

map1.insert(pairint

>(

"month"

,1));     

//插入乙個元素

map1["month"

]=1;   

// 插入乙個元素

"transmark"

>map1.find(

"month"

)    

//查詢該健,如果沒有找到返回最後一位元素後面的迭代器

map1.count("month"

)    

//查詢健"month"出現的次數,但是map中健都是單一且按照公升序排列的,只有0和1兩中情況

//因為map在建立的時候是有序的,所以查詢效率是:logn。1,000個資料只需10次查詢,1.000,000也不過20次查詢

6.棧stack:

[cpp]view plain

copy

print?

#include

stack> stack1;     

//在是預設以deque為容器的

stack1.push(element);  

stack1.pop();      

stack1.empty();    //是否為空

stack1.size();     //元素個數

stack1.top();    //判斷是否為棧頂元素

7.佇列queue:

[cpp]view plain

copy

print?

#include

queue> queue1;  

queue1.push(element);    //加入佇列頂部

queue1.pop();    //彈出佇列裡第乙個元素

queue1.back();    //佇列最後乙個元素

queue1.front();    //佇列第乙個元素

queue1.size();    //佇列元素個數

queue1.empty;    //佇列是否為空

8.優先佇列priority_queue:

[cpp]view plain

copy

print?

#include

priority_queue,vector<

int>,less<

int>> pqueue1;    

//預設容器為vector,其中less運算元,表示小的先出隊

priority_queue,vector<

int>,greater<

int>> pqueue1;    

//大的先出隊

/優先佇列與佇列相比,只是按照指定的運算元將佇列內部排序,讓後在操作排序後的棧頂元素。"transmark"

>

STL在競賽中的應用

題解 合併兩個集合,放於同一陣列排序,輸出時採用set可以去掉相同數。題解 採用棧,進行模擬 使用佇列將輸出答案壓入佇列,最後輸出。題解 使用全排序 next permutation a.begin a.end 從小到大列舉。以及vector儲存。題解 使用map字典,對字串進行處理。題解 棧的應用...

STL在ACM中的應用

stl 提供三種型別的元件 容器 迭代器和演算法,它們都支援泛型程式設計標準。在acm中充分利用stl可以大大的簡化程式,提高解題效率。1 容器主要有兩類 順序容器和關聯容器。順序容器 vector list deque string 等是一系列元素的有序集合。關聯容器 set multiset m...

在C 中STL的迭代器使用

string s1 string iterator it 指向字串s1第乙個字元的位置 s1.begin 指向字串s1最後乙個字元的位置 s1.rbegin 指向字串s1第乙個字元前一位的位置 s1.rend 依次輸出s1中的所有字元 for string iterator iter str.beg...