# STL大複習
#### 110APCS進階預備班
---
# 甚麼是STL?
- Standard Template Liberty
- 可以裝資料的容器
- 刻好的模板,方便我們使用
----
# Syllabus
- string
- vector
- stack/queue/deque
- priority_queue
- map
- set
- bitset
---
# string
``` cpp=
//declare
string s;
//give value
cin >>s;
getline(cin,s);//allow " "
//find one index
s[5];
//size
//good
cout<<s.size();
//bad
cout<<strlen(s);
//clear
s.clear();
```
---
# vector
``` cpp=
//declare
vector<int> v;
vector<char> v[10005];
//add element
//faster
v.emplace_back(x);
//slower
v.push_back(x);
//erase back
v.pop_back()
//go through
for(auto i:v){
//i:the elements of vector v
}
//size
v.size()
// clear
v.clear();
```
---
# stack/queue/deque
----
## stack
``` cpp=
//declare
stack<int> st;
stack<char> st;
//add element to back
st.push(x);
//query the last element
st.top();
//move out the last element
st.pop();
//check is empty
st.empty();
//size
st.size()
```
----
## queue
``` cpp=
//declare
queue<int> qu;
//add element to back
qu.push(x);
//query the first element
qu.front();
//move out the last element
qu.pop();
//check is empty
qu.empty();
//size
qu.size()
```
----
## deque
``` cpp=
//declare
deque<int> dq;
//add element to back
dq.push_back(x);
dq.push_front(x);
//query the last element
dq.front();
dq.back();
//move out the last element
dq.pop_back();
dq.pop_front();
//check is empty
dq.empty();
//size
dq.size()
```
----
## priority_queue
``` cpp=
//declare
priority_queue<int> pq;
//add element to back
pq.push(x);
//query the element
pq.top();
//move out the last element
pq.pop();
//check is empty
pq.empty()
//size
pq.size()
```
---
## map
``` cpp=
//declare
map<int,int> mp;
//add element to back
mp.insert(x);
mp[y]=x;
//query the element
mp[y]
mp.begin();
mp.end();
//move out the last element
mp.erase(x);
//check the element with key x is present in the map container
//return bool
mp.count(x)
//return iterator
mp.find(x)
//check is empty
mp.empty()
//size
mp.size()
```
----
## set
``` cpp=
//declare
set<int> S;
//add element to back
S.insert(x);
S[y]=x;
//query the element
S[y]
S.begin();
S.end();
//check the x is in the set
//return iterator
S.find(x)
//return
S.count(x)
//move out the last element
S.erase(x);
//check is empty
S.empty()
//size
S.size()
```
---
# bitset
``` cpp=
//declare
bitset<100010> bt;
//give value
string str;
cin>>str;
bt=bitset<100010>(str);
//find one index
bt[5];
//set all element to 0
bt.reset();
//set all element to 1
bt.set();
//bitwise operation
bitset<10> a,b;
for(auto &i:a) cin>>i;
for(auto &i:b) cin>>b;
cout<<a&b<<"\n";
cout<<a|b<<"\n";
cout<<a^b<<"\n";
```
{"metaMigratedAt":"2023-06-16T20:05:28.954Z","metaMigratedFrom":"YAML","title":"STL大複習","breaks":true,"contributors":"[{\"id\":\"4f67c477-a6ac-4743-a794-5e693b4248d6\",\"add\":18,\"del\":0},{\"id\":\"77be2af8-ce15-4578-9f4d-33dde9879cdc\",\"add\":2142,\"del\":211},{\"id\":\"bafdb37c-3398-4b0c-b651-e39724d20cc3\",\"add\":118,\"del\":202},{\"id\":\"3978a08d-c47c-4560-b04d-dfbd8e71d0a3\",\"add\":20,\"del\":1},{\"id\":\"5bb01a70-36c3-48c5-b395-f94ab50d9e3b\",\"add\":805,\"del\":2}]"}