Try Again

简单STL笔记

想了好久,还是把自己了解的先整理一下吧,毕竟老是忘,这里主要简单介绍三种容器 set,queue,vector,以及栈 stack,队列queue 的简单用法。
一、set


    在set中,效率比vector queue list高(注意,STL耗时)
    set<int>s;     常用操作有:----------------set会自动从小到大排序,并且自动去除重复元    

    1.元素插入  s.insert();
    2.顺序遍历(必须借助迭代器) set<int>::iterator it;
    3.反序遍历  set<int>::reverse_iterator rit;
    4.查找函数  s.find() 注意可以输出 cout<<*s.find()<<endl;而不能 cout<<s.find()<<endl;被查找数存在返回存在的位置,若不存在,则超出末端迭代器;
s.count()若存在返回1,不存在返回0,ps:1、0可以输出(详情见代码)。
   5.元素删除  s.erase()(ps:删除后,会自动调整);
   6.容器清空  s.clear();
   7.集合大小  s.size();

      8.multiset<unsigned int>s//多重集合,允许值重复

      9.count(s.begin(),s.end(),value)统计value出现的次数

algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。

编写程序读取一系列int型数据,并将它们存储到vector对象中,然后统计某个指定的值出现了多少次

#include<iostream>
#include<set>
using namespace std;
int main()
{
  set<int>s;
  set<int>::iterator it;
  set<int>::reverse_iterator next;
  for(int i=1;i<=10;i++)
  {
    s.insert(i);//元素插入
  }
  cout<<"顺序遍历:";
  for(it=s.begin();it!=s.end();it++)//顺序遍历
  {
    cout<<*it<<' ';
  }
  cout<<endl;
  cout<<"集合大小:";
  cout<<s.size()<<endl;
  cout<<"反向遍历:";
  for(next=s.rbegin();next!=s.rend();next++)//反序遍历
  {
    cout<<*next<<' ';
  }
  cout<<endl;
  cout<<"查找7的结果:"<<endl;
  cout<<*s.find(7)<<endl;//查找函数
  cout<<s.count(7)<<endl;
  cout<<"查找11的结果:"<<endl;
  cout<<*s.find(11)<<endl;
  cout<<s.count(11)<<endl;
  s.erase(2);//元素删除
  cout<<"删除元素2之后的顺序遍历:";
  for(it=s.begin();it!=s.end();it++)
  {
    cout<<*it<<' ';
  }
  cout<<endl;
  cout<<"删除元素2之后的集合大小:";
  cout<<s.size()<<endl;//集合大小
  s.clear();//容器清空
  cout<<"清空集合之后的集合大小:";
  cout<<s.size()<<endl;//集合大小
  return 0;
}

二、vector

反转函数reverse

 

#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
    string s,t;
    cin>>s;
    t=s;
    reverse(t.begin(),t.end());
    puts(t==s?"Yes":"No");
    return 0;
}

二、prioroty_queue

优先队列的简单排序

 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#define lowbit(x) (x&(-x))
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.141592653589793238462
#define INF 0x3f3f3f3f3f
#define mem(a) (memset(a,0,sizeof(a)))
typedef long long ll;
struct Node
{
    int val;
    friend bool operator<(const Node &a,const Node &b)
    {
        return a.val>b.val;//大于小于号的方向与大小相反
    }
}node[100];
int main()
{
    priority_queue<int>v;
    priority_queue<int,vector<int>,greater<int> >q;
    priority_queue<Node>p;
    int n,x;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&x);
        node[i].val=x;
        v.push(x);
        q.push(x);
        p.push(node[i]);
    }
    while(!v.empty())
    {
        printf("%d ",v.top());
        v.pop();
    }
    printf("\n");
    while(!q.empty())
    {
        printf("%d ",q.top());
        q.pop();
    }
    printf("\n");
    while(!p.empty())
    {
        printf("%d ",p.top().val);
        p.pop();
    }
    return 0;
}

 

posted @ 2017-03-22 16:26  十年换你一句好久不见  阅读(145)  评论(0编辑  收藏  举报