STL中常用函式
阿新 • • 發佈:2019-01-04
STL容器Stack
標頭檔案寫:#include<stack>
定義: stack <TYPE> StackName;
成員函式:
成員函式 | 功能 |
bool empty() | 棧為空返回true,否則返回false |
void pop() | 刪除棧頂元素,即出棧 |
void push(const TYPE &val) | 將新元素val進棧,使其成為棧頂元素 |
TYPE &top() | 檢視當前棧頂元素 |
size_type size() | 返回堆疊中的元素數目 |
程式:
#include <iostream> #include <stack> using namespace std; int main() { stack <int> Stack1; Stack1.push(3);//進棧 Stack1.push(6); Stack1.pop();//出棧,相當於刪除棧頂元素 cout<<"當前棧頂元素:"<<Stack1.top()<<endl; cout<<"判斷是否為空"<<Stack1.empty()<<endl; cout<<"輸出棧中元素數目:"<<Stack1.size(); }
STL容器vector
標頭檔案寫:#include<vector>
vector的建構函式和解構函式:
成員函式 | 功能 |
vector<TYPE>c | 產生一個空vector沒有任何元素 |
vector<TYPE>c1(c2) | 產生另一個同型的vector副本(所有元素被複制) |
vector<TYPE>c(n) | 生成一個大小為n的vector |
vector<TYPE>c(n,elem) | 生成一個大小為n的vector,每個元素值為elem |
c.~vector<TYPE>() | 銷燬所有元素,並釋放記憶體 |
vector的幾種重要的操作:
size( ) //返回當前的元素數量
empty( ) //判斷是否為空
VectorName[n]; //返回VectorName中位置為n 的值
v1=v2 //把v1元素的值替換為v2元素的副本;
v1==v2 //判斷v1與v2是否相等
!=、<、<=、>、>=;//保持這些操作符慣有含義
vector的成員函式:
程式:
#include<iostream> #include <vector> using namespace std; int main() { vector<int>c; vector<int>c1; c.assign(3,2);//將3個2賦值給c c1.assign(1,3);//從1~3選一個數字給C1 c.push_back(4);c1.push_back(4); c.push_back(5);c1.push_back(5); cout<<"輸出c中的元素個數:"<<c.size()<<endl;//結果為5 if(c==c1) cout<<"c與c1相等"; else cout<<"c與c1不相等";//結果不相等 return 0; }
STL容器Queue以及優先佇列priority_queue
C++ Queues(佇列)
C++佇列是一種容器介面卡,它給予程式設計師一種先進先出(FIFO)的資料結構。
pop() | 刪除第一個元素 |
在末尾加入一個元素 | |
返回佇列中元素的個數 |
C++ Priority Queues(優先佇列)
C++優先佇列類似佇列,但是在這個資料結構中的元素按照一定的斷言排列有序。
如果優先佇列為空,則返回真 | |
pop() | 刪除第一個元素 |
返回優先佇列中擁有的元素的個數 | |
top() | 返回優先佇列中有最高優先順序的元素 |
#include <bits/stdc++.h>
using namespace std;
int main(){
priority_queue<int>q;int x;//正序的方法(大的數字放在棧頂)
for(int i=0;i<6;i++)
{cin>>x;
q.push(x);
}
while(!q.empty()){
cout<<q.top()<<' ';
q.pop();
}
return 0;
}
結果截圖:
#include <bits/stdc++.h>
using namespace std;
int main(){//倒序的方法,小的數字放在隊頂
priority_queue<int,vector<int>,greater<int> >q;int x;//注意greater<int>後一定要加空格
for(int i=0;i<6;i++)
{cin>>x;
q.push(x);
}
while(!q.empty()){
cout<<q.top()<<' ';
q.pop();
}
return 0;
}
結果截圖:
STL容器set
C++ Sets
集合(Set)是一種包含已排序物件的關聯容器
返回指向第一個元素的迭代器 | |
如果集合為空,返回true | |
返回指向最後一個元素的迭代器 | |
返回集合中與給定值相等的上下限的兩個迭代器 | |
返回一個指向被查詢到元素的迭代器 | |
返回指向大於(或等於)某值的第一個元素的迭代器 | |
返回一個用於元素間值比較的函式 | |
返回集合能容納的元素的最大限值 | |
返回指向集合中最後一個元素的反向迭代器 | |
返回指向集合中第一個元素的反向迭代器 |
目前我認為用到set最經典的一道題是我的部落格上那道--》列車排程 用set最簡潔
不知道為什麼居然自動給排序了!!!
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int myints[] = {75,99,65,42,13};
set<int> myset (myints,myints+5);
cout << "myset contains:";
for (set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)//注意iterator和reverse_iterator的區別,下邊有例子
cout << ' ' << *it;
cout <<endl;
return 0;
}
結果截圖:
還可以從大到小輸出哪
int main ()
{
int myints[] = {21,64,17,78,49};
std::set<int> myset (myints,myints+5);
std::set<int>::reverse_iterator rit;
std::cout << "myset contains:";
for (rit=myset.rbegin(); rit != myset.rend(); ++rit)
std::cout << ' ' << *rit;
std::cout << '\n';
return 0;
}
//輸出結果為 78 64 49 21 17
STL容器Map
//最牛的功能是自動刪除重複的元素,並且按第一個key 給排好序了
#include <bits/stdc++.h>
using namespace std;
int main(){
map<string,int>m;
map<string,int>::iterator it;
int n;
scanf("%d",&n);
string s;int x;
for(int i=0;i<n;i++){
cin>>x>>s;
m.insert( pair<string,int>(s,x) );
}
m.erase("Tom");//只能根據key來刪除元素,及第一個元素
it=m.begin();
while(it!=m.end()){
cout<<it->first<<" "<<it->second<<endl;
it++;
}
return 0;
}