stack s1; // 默认使用deque作为底层容器
stack> s2; // 使用vector作为底层容器
// 入栈
s1.push(1);
s1.push(2);
s1.push(3);
// 出栈
int ret = 0;
if(!s1.empty()){
ret = s1.top();
s1.pop();
}
// 获取大小
cout << "size: " << s1.size() << endl;
template bool matchBracket(const string &str, stack & s){
clearStack(s);
for(auto c: str){
if(c == '(' || c == '[' || c == '{'){
s.push(c);
}else if(c == ')' || c == ']' || c == '}'){
if(s.empty()){
return false;
}
if((c == ')' && s.top() == '(') || (c == ']' && s.top() == '[') || (c == '}' && s.top() == '{')){
s.pop();
}else{
return false;
}
}
}
return s.empty();
}
vector testCases = {
"({[()]}", // false
"{[]()}[()(())]", // true
};
stack s3;
for(auto testCase: testCases){
cout << matchBracket(testCase, s3) << endl;
}
queue< double > q1;
queue< double, vector > q2;
// 队尾入队
q1.push( 3.2 );
q1.push( 9.8 );
q1.push( 5.4 );
// 访问队头队尾元素
cout << q1.front() << " " << q1.back() << endl;
// 队头出队
cout << q1.frint();
q1.pop();
// 清空队列
while( !values.empty() ){
cout << values.front() << ' ';
values.pop();
}
实现堆排序从而让队列按照优先级出队。比较器指定为less
,大值元素优先级高,形成大根堆。比较器指定为greater
,小值元素优先级高,形成小根堆。默认底层数据结构为vector,也可以指定为deque。
push操作:先调用底层的push_back(),再使用heapsort重新排序。
pop操作 :调用底层pop_back();top操作:调用底层的front()函数。
empty操作:调用底层的empty()函数。
#include
template void enqueue(QT &q, DT elems){
for(auto elem: elems){
q.push(elem);
}
}
priority_queue, less> pq;
vector elems = {2,4,1,6,5,8,7,9,3};
enqueue(pq, elems);
while(!pq.empty()){ // {9,8,7,6,5,4,3,2,1}
cout << pq.top() << ' ';
pq.pop();
}
#include
#include
#include
using namespace std;
template void enqueue(QT &q, DT elems){
for(auto elem: elems){
q.push(elem);
}
}
template T findKthMaxElem(const vector &nums, int k){
priority_queue, less> pq;
enqueue(pq, nums);
while(k > 1){
pq.pop();
k--;
}
return pq.top();
}
int main() {
priority_queue, less> pq;
vector elems = {2,4,1,6,5,8,7,9,3};
int ret = findKthMaxElem(elems, 3);
cout << ret << endl;
return 0;
}