C++之STL基本操作
阿新 • • 發佈:2020-07-26
vector
- vector
v - reverse(v.begin(), v.end()), 反轉容器的內容;
- v.push_back() v.pop_back(無引數) v.size();
- v.push_front(), 很慢其實;
- v.erase();
- v.insert(it, value);
- vec
::iterator it=v.begin();it!=v.end();it++ 遍歷; - v.resize(0);
set
- set
s - s.insert()
- s.find(type)
- s.count(type)
- s.remove(type)
- 紅黑樹實現,按照字典序的順序從小到大排序
unordered_set
- unordered_set
s - 用法同set, 只不過hash實現,佔用空間,但是插入和查詢都是o(1)的時間複雜度
map
- map<type1, type2> m;
- m[type1]=type2 m.find(type1) m.count(type1) m.remove(type1);
- m.first() m.second();
- map中不存在相同元素,按照key自動進行排序;
- m.count(key)返回的是具有key的元素個數,如果有,則返回1,沒有則返回0,注意這裡每個key只能有一個或者0個;
- m.find(key)返回的是此值所在的位置,沒有返回m.end();
- m.insert(make_pair(key, value));
- map<type1, type2>::Key_type指的是key的型別,返回的是type1;
- map<type1,type2>::value_type返回的是pair型別,pair->second返回的是type2型別
unordered_map
- unordered_map<type1, type2> um;
- 用法和map類似,底層hash實現key,無序,後一個相同key的值會覆蓋前一個key的value;
stack
- stack
s; - s.push() s.pop() s.top();
queue
- queue
q; - q.push() q.pop() q.front();
- q.back(),q.pop_front(),q.push_front();
priority_queue
- priority_queue
pq; - 優先佇列,本身為“越小的整數優先順序越低的優先佇列”
- 從小到大排列 隊首取右邊,即大的一方
- pq.push() pq.pop() pq.top()
- 從大到小排列 priority_queue<int, vector
,greater > pq; - 自定義優先佇列
//過載運算子
struct stu
{
string name;
int num;
int age;
bool operator<(const stu &p)const
{
return age>p.age;
}
}S[5];
int main(int argc, char *argv[])
{
S[0]={"aa",1,10};
S[1]={"bb",2,9};
S[2]={"cc",3,8};
S[3]={"dd",4,7};
S[4]={"ee",5,6};
priority_queue<stu>q;
for(int i=0;i<5;i++)q.push(S[i]);
while(!q.empty())
{
cout<<q.top().name<<" ";
q.pop();
}
return 0;
}
//自定義仿函式
struct stu
{
string name;
int num;
int age;
}S[5];
struct cmp
{
operator ()(const stu &q,const stu &p)
{
return q.num<p.num;
}
};
int main(int argc, char *argv[])
{
S[0]={"aa",1,10};
S[1]={"bb",2,9};
S[2]={"cc",3,8};
S[3]={"dd",4,7};
S[4]={"ee",5,6};
priority_queue<stu,vector<stu>,cmp >q;
//priority_queue<stu>q;
for(int i=0;i<5;i++)q.push(S[i]);
while(!q.empty())
{
cout<<q.top().name<<" ";
q.pop();
}
return 0;
}
string
- string a
- string b
- int pos=a.find(b, startPos);//為從a中的startPos位置上找是否和b有相同的串,有的話返回開始的下標pos,即子串尋找。
- a.erase(startPos, size) //即去除a中從startPos開始的長度為size的串