//让我来学习一波STL,以后绝对可以用到的
#include<bits/stdc++.h>
#include<iostream>
#include<stack>
#include<queue>
#include<vector>
using namespace std;
int main(int argc, char const *argv[]) {
//栈的容器用法
stack<int>stack1;
stack1.push(5);
stack1.push(6);
while(!stack1.empty()){
cout<<stack1.top()<<" ";
stack1.pop();
}
cout<<endl;
cout<<"------------------stack1"<<endl;
//STL中的vector
vector<int>c;
vector<int>c1;
c.assign(3,2);//将3个2赋值给c
c1.assign(1,3);//从1-3选一个数字给c1
c.push_back(4);//将4放入c中(尾插)
c.push_back(5);//将5放入c中
c1.push_back(4);
c1.push_back(5);
//返回两个容器中的元素个数
cout<<c.size()<<endl;
cout<<c1.size()<<endl;
c.pop_back();//尾部删除元素
cout<<c.size()<<endl;
c.insert(c.end(),2);
cout<<c.size()<<endl;
c.erase(c.end()-1);
cout<<c.size()<<endl;
//判断两个容器中元素是否相等
if(c==c1){
cout<<1<<endl;
}
else
cout<<0<<endl;
cout<<"------------------vector"<<endl;
//队列的使用方法
queue<int>queue1;
queue1.push(1);//1进入队列
queue1.push(2);//2进入队列
queue1.push(3);//3进入队列
cout<<queue1.front()<<endl;//获得队头元素
cout<<queue1.back()<<endl;//获得队尾元素
cout<<queue1.size()<<endl;//获得队列元素的个数
cout<<"------------queue"<<endl;
//优先队列的使用方法
priority_queue<int>q;
//优先队列会进行排序,默认从大到小排序
int x;
for(int i=0;i<6;i++){
cin>>x;//需要输入六个数例:1 2 5 4 6 3
q.push(x);
}
while(!q.empty()){
cout<<q.top()<<" ";
q.pop();
}
//其他用法与队列类似
cout<<endl;
cout<<"---------------priority_queue"<<endl;
//set容器是一个红黑树具有两个特点
//1,set中的函数都是排好序的
//2,set中没有重复的元素
//begin()返回的是第一个元素的地址
//end()返回最后一个元素的地址
//set中还可以是结构体,则定义时类型是结构体的标签
//需要从大到小排列时在定义时加入greater<int>就可以实现
set<int>s;
s.insert(3);
s.insert(2);
s.insert(1);
s.insert(3);
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++){
//使用迭代器进行遍历
cout<<*it<<" ";
}
cout<<endl;
cout<<"---------------set"<<endl;
//链表的使用
// assign() 给list赋值
// back() 返回最后一个元素
// begin() 返回指向第一个元素的迭代器
// clear() 删除所有元素
// empty() 如果list是空的则返回true
// end() 返回末尾的迭代器
// erase() 删除一个元素
// front() 返回第一个元素
// get_allocator() 返回list的配置器
// insert() 插入一个元素到list中
// max_size() 返回list能容纳的最大元素数量
// merge() 合并两个list
// pop_back() 删除最后一个元素
// pop_front() 删除第一个元素
// push_back() 在list的末尾添加一个元素
// push_front() 在list的头部添加一个元素
// rbegin() 返回指向第一个元素的逆向迭代器
// remove() 从list删除元素
// remove_if() 按指定条件删除元素
// rend() 指向list末尾的逆向迭代器
// resize() 改变list的大小
// reverse() 把list的元素倒转
// size() 返回list中的元素个数
// sort() 给list排序
// splice() 合并两个list
// swap() 交换两个list
// unique() 删除list中重复的元素
list<int>listone;
list<int>::iterator i;
//在容器前面增加数据
listone.push_front(2);
listone.push_front(1);
//在容器后面增加数据
listone.push_back(3);
listone.push_back(4);
//从前向后显示数据
for(i=listone.begin();i!=listone.end();i++){
cout<<*i<<" ";
}
cout<<endl;
//从后向前显示数据
list<int>::reverse_iterator ir;
for(ir=listone.rbegin();ir!=listone.rend();ir++){
cout<<*ir<<" ";
}
cout<<endl;
//计算加法
int result=accumulate(listone.begin(),listone.end(),0);
cout<<"Sum="<<result<<endl;
cout<<"------------------list"<<endl;
//学习map容器函数
// begin() 返回指向map头部的迭代器
// clear() 删除所有元素
// count() 返回指定元素出现的次数
// empty() 如果map为空则返回true
// end() 返回指向map末尾的迭代器
//
// equal_range() 返回特殊条目的迭代器对
//
// erase() 删除一个元素
// find() 查找一个元素
// insert()插入元素
// max_size()返回可以容纳的最大元素个数
// size() 返回map中元素的个数
// swap() 交换两个map
//
// get_allocator() 返回map的配置器
// key_comp() 返回比较元素key的函数
// lower_bound() 返回键值>=给定元素的第一个位置
// max_size() 返回可以容纳的最大元素个数
// rbegin() 返回一个指向map尾部的逆向迭代器
// rend() 返回一个指向map头部的逆向迭代器
// upper_bound() 返回键值>给定元素的第一个位置
// value_comp() 返回比较元素value的函数
return 0;
}