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...