簡單STL

GUO_dx發表於2020-11-16

string:

string s="5418340";
sort(s.begin(),s.end());
cout<<s;
/**begin是頭迭代器,end是尾迭代器*/
string s="5418340";
s.erase(s.begin());//刪除第一個
s.erase(--s.end());//刪除最後一個
cout<<s;

string s="5418340";
s=s.substr(1,3);//取418,取索引為1,往後截斷3個
s=s.substr(1,-1);//索引為1,截斷到最後
cout<<s;
for(auto it=s.begin();it!=s.end();it++) cout<<*it;
for(auto x:s) cout<<x;

vector

vector<int> v{1,2,3,4,5};
cout<<v[1];//取索引為1的
cout<<v.at(2);//取索引為2的
v.push_back(5);
v.resize(10);//不賦值預設為0

v.erase(v.begin());//刪除第一個元素
v.erase(--v.end());//刪除最後一個元素
/**獲取第一個元素*/
cout<<v.front();
cout<<v[0];
cout<<*v.begin();
/**獲取最後一個元素*/
cout<<v.back();
cout<<v[v.size()-1];//size是獲取大小
cout<<*--v.end();
sort(v.begin(),v.end(),less<int>());//從小到大
sort(v.begin(),v.end(),greater<int>());//從大到小排序

for(auto it=v.begin();it!=v.end();it++) cout<<*it;//迭代器簡化迴圈
cout<<endl;
for(auto x:v) cout<<x;//c++11 

stack

stack<int> s;
s.push(2);
s.push(3);
cout<<s.top()<<endl;
s.pop();
cout<<s.top()<<endl;
cout<<s.size()<<endl;

queue

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,
和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

queue<int> q;

q.push(5);
q.push(6);
cout<<q.front()<<endl;
q.pop();

cout<<q.front()<<endl;
cout<<q.size()<<endl;

map

map<int,int> m;//有序的 
m[6]=3;
m[5]=8;
m[4]=9;
for(auto it=m.begin();it!=m.end();it++)
	cout<<it->first<<" "<<it->second<<endl;
for(auto tmp:m){
	cout<<tmp.first<<" "<<tmp.second<<endl;
}

unordered_map<int,int> m;//無序的,雜湊結構(底層)
m[6]=3;
m[5]=8;
m[4]=9;
for(auto it=m.begin();it!=m.end();it++)
	cout<<it->first<<" "<<it->second<<endl;
for(auto tmp:m){
	cout<<tmp.first<<" "<<tmp.second<<endl;
}


/*sort*/
bool cmp(pair<int,int> a,pair<int,int> b){
    return a.first>b.first;
}
int main(){
    unordered_map<int,int> m;//無序的,雜湊結構(底層)
    m[6]=3;
    m[5]=8;
    m[4]=9;
    vector<pair<int,int>> v(m.begin(),m.end());
    sort(v.begin(),v.end(),cmp);
    for(auto tmp:v){
        cout<<tmp.first<<tmp.second<<endl;
    }
    return 0;
}

set

set<int> s;//樹狀結構,有序
unordered_set<int> s2;//雜湊結構,無序,快
s.insert(3);
s.insert(4);
s.insert(4);
s.insert(4);
cout<<s.size()<<endl;
for(auto tmp:s)
	cout<<tmp<<" ";
cout<<endl;
for(auto it=s.begin();it!=s.end();it++)
	cout<<*it<<" ";
cout<<endl;

deque

///概念:雙端佇列

deque<int> d;
// 4 9 1 2
d.push_back(1);
d.push_back(2);
d.push_front(9);
d.push_front(4);
d.pop_back();
d.pop_front();
for(auto tmp:d) cout<<tmp<<endl;
for(auto it=d.begin();it!=d.end();it++) cout<<*it<<endl;

//排序
sort(d.begin(),d.end(),greater<int>());