#include<iostream>
#include<cstdio>
#include<vector>
#include<numeric>
#include<string>
#include<algorithm>
#include<set>
#include<map>
#include<deque>
#include<list>
#include<cstdlib>
#include<bitset>
#include<stack>
#include<queue>
using namespace std;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~priority_queue
struct student
{
int num;
int score;
bool operator < (const student &s)const
{
return s.score<score;
}
};
struct mycom
{
bool operator () (const int &a,const int &b)
{
return a>b;
}
};
int main()
{
priority_queue<int> pq;
pq.push(2);
pq.push(1);
pq.push(6);
pq.push(3);
cout<<pq.size()<<endl;
cout<<pq.empty()<<endl;
while(pq.empty()!=true)
{
cout<<pq.top()<<' ';
pq.pop();
}
cout<<endl;
priority_queue<student> pqs;
student a;
a.num=1;
a.score=75;
pqs.push(a);
a.num=2;
a.score=66;
pqs.push(a);
a.num=3;
a.score=82;
pqs.push(a);
a.num=4;
a.score=80;
pqs.push(a);
cout<<pqs.size()<<endl;
cout<<pqs.empty()<<endl;
while(pqs.empty()!=true)
{
cout<<pqs.top().num<<' '<<pqs.top().score<<endl;
pqs.pop();
}
priority_queue<int,vector<int>,mycom> pqi;
pqi.push(10);
pqi.push(3);
pqi.push(1);
pqi.push(6);
while(pqi.empty()!=true)
{
cout<<pqi.top()<<' ';
pqi.pop();
}
cout<<endl;
}
~~~~~~~~~~~~~~~~~~~~~~~~~queue
int main()
{
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(6);
cout<<q.size()<<endl;
cout<<q.empty()<<endl;
cout<<q.front()<<endl;
cout<<q.back()<<endl;
while(q.empty()!=true)
{
cout<<q.front()<<' ';
q.pop();
}
cout<<endl;
}
~~~~~~~~~~~~~~~~~~~~~~~~~stack
int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.push(6);
cout<<s.top()<<endl;
cout<<s.size()<<endl;
cout<<s.empty()<<endl;
while(s.empty()!=true)
{
cout<<s.top()<<' ';
s.pop();
}
cout<<endl;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bitset
int main()
{
bitset<10> b;
b[0]=1;
b[5]=1;
b[10]=1;
for(int i=0;i<=b.size()-1;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
b.set(3,1);
for(int i=0;i<=b.size()-1;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
b.set(3,0);
for(int i=0;i<=b.size()-1;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
b.set(3);
for(int i=0;i<=b.size()-1;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
b.reset(3);
for(int i=0;i<=b.size()-1;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
b.set();
for(int i=0;i<=b.size()-1;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
b.set(3,0);
cout<<b<<endl;//反向输出
}
~~~~~~~~~~~~~~~~~~~~~~~~~list
int main()
{
list <int> l;
l.push_back(2);
l.push_back(13);
l.push_back(4);
l.push_front(10);
list<int>::iterator it;
it=l.begin();
it++;
l.insert(it,9);
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
list<int>::reverse_iterator rit;
for(rit=l.rbegin();rit!=l.rend();rit++)
{
cout<<*rit<<' ';
}
cout<<endl;
l.push_back(2);
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
l.remove(2);
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
it=l.begin();
it++;
l.erase(it);
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
l.push_back(6);
l.push_back(5);
l.push_back(3);
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
//l.clear();//清空链表
cout<<l.size()<<endl;//size()返回链表长度
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
it=find(l.begin(),l.end(),10);
cout<<"find(10)"<<endl;
if(it!=l.end())
{
cout<<"find it"<<endl;
}
else
{
cout<<"not find it"<<endl;
}
it=find(l.begin(),l.end(),66);
cout<<"find(66)"<<endl;
if(it!=l.end())
{
cout<<"find it"<<endl;
}
else
{
cout<<"not find it"<<endl;
}
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
l.sort();
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
l.push_back(6);
l.push_back(6);
l.push_front(3);
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
l.unique();//剔除连续元素(相邻相同保留一个)
for(it=l.begin();it!=l.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~lian biao
#define NULL 0;
int sum=0;
struct student
{
int num,score;
struct student *next;
};
void print(struct student *head)
{
struct student *p=head;
if(head!=NULL)
{
while(p!=NULL)
{
cout<<p->num<<' '<<p->score<<endl;
p=p->next;
}
}
}
int main()
{
struct student *head,*p,*q;
head=NULL;
p=q=(struct student *)malloc(sizeof(struct student));
sum=0;
cin>>p->num>>p->score;
while(p->num!=0)
{
sum++;
if(sum==1)
{
head=p;
head->next=NULL;
}
else
{
q->next=p;
q=p;
p=(struct student *)malloc(sizeof(struct student));
cin>>p->num>>p->score;
}
p->next=NULL;
}
print(head);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~deque
int main()
{
deque<int> d;
d.push_back(1);
d.push_back(2);
d.push_back(3);
d.push_back(4);
d.push_front(10);
d.push_front(20);
deque<int>::iterator it;
for(it=d.begin();it!=d.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
d.insert(d.begin()+3,50);
d.push_back(60);
for(it=d.begin();it!=d.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
//使用erase()从中部删除元素 参数为所需删除的元素的指针
d.erase(d.begin()+3);
//使用pop_front()从头部删除元素
d.pop_front();
d.pop_front();
//使用pop_back()从尾部删除元素
d.pop_back();
//还可采用clear()清空对列
for(it=d.begin();it!=d.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
//size()函数返回队列的长度
cout<<d.size()<<endl;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~multimap
int main()
{
multimap<string,double> mm;
mm.insert(pair<string,double>("aaa",1.11));
mm.insert(pair<string,double>("bbb",2.22));
mm.insert(pair<string,double>("ccc",3.33));
mm.insert(pair<string,double>("ddd",4.44));
mm.insert(pair<string,double>("ccc",3.33));
multimap<string,double>::iterator it;
for(it=mm.begin();it!=mm.end();it++)
{
cout<<(*it).first<<' '<<(*it).second<<endl;
}
//删除操作采用 erase()方法,
//可删除某个迭代器位置上的元素,等于某个键值的所有重复元素,
//一个迭代器区间上的元素.使用clear()方法可将multimap容器中的元素清空.
mm.erase("ccc");
for(it=mm.begin();it!=mm.end();it++)
{
cout<<(*it).first<<' '<<(*it).second<<endl;
}
mm.insert(pair<string,double>("ccc",3.33));
//由于multimap存在重复的键值,
//所以find()方法只返回重复键值中的第一个元素的迭代器位置,
//如果没有找到该键值,则返回end()迭代器位置
it=mm.find("ccc");
if(it!=mm.end())
{
cout<<(*it).first<<' '<<(*it).second<<endl;
}
else
{
cout<<"not find it"<<endl;
}
it=mm.find("eee");
if(it!=mm.end())
{
cout<<(*it).first<<' '<<(*it).second<<endl;
}
else
{
cout<<"not find it"<<endl;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~map
int main()
{
map<int,char> m;
m[9]='a';
m[3]='b';
m[7]='c';
m[1]='d';
map<int,char>::iterator it;
for(it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<' '<<(*it).second<<endl;
}
//与set容器一样,map映照容器的erase()删除元素函数,
//可以删除某个迭代器位置上的元素,等于某个键值的元素,一个迭代器区间上的所有元素,
//当然,也可使用clear()方法清空map映照容器,
m.erase(7);
for(it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<' '<<(*it).second<<endl;
}
//元素反向遍历
map<int,char>::reverse_iterator rit;
for(rit=m.rbegin();rit!=m.rend();rit++)
{
cout<<(*rit).first<<' '<<(*rit).second<<endl;
}
//使用find()方法来搜索某个键值,如果搜索到了,则返回该键值所在的迭代器位置,
//否则,返回end()迭代器位置.由于map采用黑白树数据结构来实现,所以搜索速度是极快的,
it=m.find(3);
if(it!=m.end())
{
cout<<(*it).first<<' '<<(*it).second<<endl;
}
else
{
cout<<"not find it"<<endl;
}
it=m.find(5);
if(it!=m.end())
{
cout<<(*it).first<<' '<<(*it).second<<endl;
}
else
{
cout<<"not find it"<<endl;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~multiset
multiset与set一样,也是使用红黑树来组织元素数据的,唯一不同的是,
multiset允许重复的元素键值插入,而set则不允许
int main()
{
multiset<string> ms;
ms.insert("123");
ms.insert("abc");
ms.insert("ABC");
ms.insert("abc");
multiset<string>::iterator it;
for(it=ms.begin();it!=ms.end();it++)
{
cout<<*it<<endl;
}
//采用 erase()方法可以删除multiset对象中的某个迭代器位置上的元素,
//某段迭代器区间中的元素,键值等于某个值的所有重复元素,并返回删除元素的个数
int n=ms.erase("abc");
cout<<n<<endl;
for(it=ms.begin();it!=ms.end();it++)
{
cout<<*it<<endl;
}
ms.insert("abc");
ms.insert("aaa");
ms.insert("ccc");
//使用 find()方法查找元素,如果找到,则返回该元素的迭代器位置
//(如果该元素存在重复,则返回第一个元素重复元素的迭代器位置);
//如果没有找到,则返回end()迭代器位置
it=ms.find("aaa");
if(it!=ms.end())
{
cout<<*it<<endl;
}
else
{
cout<<"not find it"<<endl;
}
it=ms.find("bbb");
if(it!=ms.end())
{
cout<<*it<<endl;
}
else
{
cout<<"not find it"<<endl;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~set
int main()
{
set<int> s;
s.insert(7);
s.insert(4);
s.insert(15);
s.insert(7);//因为已经有7所以不再存
s.insert(1);
set<int>::iterator it;
for(it =s.begin();it!=s.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
set<int>::reverse_iterator rit;
for(rit=s.rbegin();rit!=s.rend();rit++)
{
cout<<*rit<<' ';
}
cout<<endl;
s.insert(3);
s.insert(6);
s.insert(9);
s.insert(12);
s.insert(15);
for(it=s.begin();it!=s.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
//删除3的倍数 详解看博客https://blog.csdn.net/yangruibao/article/details/9040045
for(it=s.begin();it!=s.end();)
{
if(*it%3==0)
{
s.erase(it++);
}
else
{
it++;
}
}
//当时用erase()删除指定区间时只能删除(s.begin()————s.end())
for(it=s.begin();it!=s.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
if(s.find(6)!=s.end())
{
cout<<*(s.find(6))<<' ';
}
else
{
cout<<"not find it"<<' ';
}
cout<<endl;
if(s.find(7)!=s.end())
{
cout<<*(s.find(7))<<' ';//可写成cout<<*s.find(7)<<' ';
}
else
{
cout<<"not find it"<<' ';
}
cout<<endl;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~string
int main()
{
string s;
char ss[]="bbbbbb";
s=ss;
//在 string 对象的尾部添加一个字符(char),采用“+”操作符即可
s=s+'a';
cout<<s<<endl;
//从 string 对象尾部追加字符串
//1
s=s+"bbb";
cout<<s<<endl;
//2
s.append("append");
cout<<s<<endl;
s.insert(s.begin(),'1');//在s.begin()位置插入字符'1' 其余元素后移一位(包括s.begin()位置上的元素)
cout<<s<<endl;
s.insert(s.begin()+9,'z');//在s.begin()+9位置插入字符'z' 其余元素后移一位(包括s.begin()+9位置上的元素)
cout<<s<<endl;
s.replace(2,3,"aa");//用"aa"代替从s.begin()+2位置开始的长度为3的串
cout<<s<<endl;
//采用 find()方法可查找字符串中的第一个字符元素(char,用单引号界定)或者子串(用双引号界定)
//如果查到,则返回下标值(从0开始计数),如果查不到,则返回4294967295.
cout<<s.find('z')<<endl;
cout<<s.find('o')<<endl;
cout<<s.find("append")<<endl;
//string 对象可与使用 compare()方法与其他字符串相比较.
//如果它比对方大,则返回1;如果它比对方小,则返回-1;
//如果它与对方相同(相等),则返回 0
//判断方法:从第一个开始判断 通过比较ASCII码的大小来判断大小
//(如"1aaa">"1baabbabzbbappend","1baabbabzbbappend"<"append")
cout<<s.compare("append")<<endl;
cout<<s.compare("1aaa")<<endl;
cout<<s.compare("1baabbabzbbappend")<<endl;
vector<string> a;
a.push_back("aaaa");
a.push_back("bbbb");
a.push_back("cccc");
cout<<a[0]<<endl;
cout<<a.size()<<endl;
//使用accumulate将string队列连接成一个字符串
string sss=accumulate(a.begin(),a.end(),string(""));
cout<<sss<<endl;
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
printf(a[i].c_str());//printf采用printf(s.c_str())输出
printf("\n");
cout<<'\n';
}
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~vector
bool comp(const int &a,const int &b)
{
return a>b;
}
int main(int argc, char* argv[])
{
//定义向量 v
vector<int> v;
int i;
vector<int>::iterator it;
//赋值
for(i=0;i<3;i++)
{
//尾部元素扩张方式赋值
v.push_back(i);
}
v.insert(v.begin(),8);//在v.begin()的位置插入8 其后的元素全部后移一位
v.insert(v.begin()+2,7);//在v.begin()+2的位置插入7 其后的元素全部后移一位
for(it=v.begin();it!=v.end();it++)//(v.end()返回最后一个元素的下一个元素的地址)
{
cout<<*it<<" ";
}
cout<<endl;//回车换行
v.erase(v.begin());//删除指定位置上的数(v.begin()上的数)
v.erase(v.begin()+1);//删除(v.begin()+1上的数)
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;//回车换行
for(i=3;i<15;i++)
{
v.push_back(i);
}
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;//回车换行
v.erase(v.begin()+7,v.begin()+10);//左闭右开(删除v.begin()————v.begin()+10-1)
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;//回车换行
reverse(v.begin()+2,v.begin()+5);//反向排序(左闭右开)
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;//回车换行
sort(v.begin(),v.end());//从小到大排序(左闭右开)
//使用 iterator 迭代器顺序遍历所有元素
for(it=v.begin();it!=v.end();it++)
{
//输出迭代器当前位置上的元素值
cout<<*it<<" ";
}
cout<<endl;
sort(v.begin(),v.end(),comp);
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;//回车换行
for(it=v.begin();it!=v.end();)
{
if(*it%2==0)
{
v.erase(it);
}
else
{
it++;
}
}
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
//统计并输出向量所有元素的和(范围:v.begin()--v.end() 初值为0)
cout<<accumulate(v.begin(),v.end(),0)<<endl;//(左闭右开)
cout<<v.size()<<endl;
cout<<v.empty()<<endl;
v.clear();
cout<<v.size()<<endl;
cout<<v.empty()<<endl;
return 0;
}