zoukankan      html  css  js  c++  java
  • STL和基本数据结构

    栈和stack

    stack<Type> s;    //定义栈,Type为数据类型,例如 int,float,char等 
    s.push(item);     //把item放到栈顶
    s.top();          //返回栈顶的元素,但不会删除 
    s.pop();          //删除栈顶的元素,但不会返回,在出栈时需要进行两步操作 
                      //先top()获得栈顶元素,在pop()删除栈顶元素 
    s.size();          //返回栈中元素的个数 
    s.empty();         //检查栈是否为空,如果为空,返回true,否则返回false
    
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        char ch;
        cin>>n;
        getchar();
        while(n--){
            stack<char> s;
            while(true)
    {
        ch=getchar();
        if(ch==''||ch=='
    '||ch=EOF){
            cout<<s.top();    //输出栈顶 
            s.pop();          //清除栈顶 
        }
        if(ch=='
    '||ch=EOF)   break;
        cout<<" ";
        }
        else   s.push(ch);//入栈    }
        return 0;
     } 

    队列和queue

    与栈恰好相反,栈是先进后出,队列是先进先出

    可对比栈来学习:

    queue<Type>  q;
     q.push(item);
     q.front();      //返回队首元素,但不会删除 
     q.pop();
     q.back();       //返回队尾元素 
     q.size();
     q.empty(); 

    优先队列和priority_queue

    优先队列,顾名思义就是优先级最高的先出队,他是队列和排序的完美结合,不仅可以存储数据,还可以将这些数据按照设定的规则进行排序,每次的push和pop操作,优先队列都会动态调整,把优先级最高的元素放在前面。

    优先队列的有关操作如下:

     q.top();     //返回具有最高优先级的元素值,但不删除该元素;
     q.pop();     //删除最高优先级元素; 
     q.push(item); //插入新元素; 

    链表和list:

    STL的list数据结构的双向链表,它的内存空间可以是不连续的,通过指针来进行数据的访问,他可以高效率地在任意地方删除和插入,插入和删除操作是常数时间的。

    比较 list和vector:

    (1)vector:插入和删除操作少,随机访问元素频繁;

    (2)list:插入和删除频繁,随机访问较少;

    Set

    set<Type>  A;   //定义 
     A.insert(item);  //把item放进set
     A.erase(item)   //删除元素item
     A.clear();    //清空set;
     A.empty();    //判断是否为空;
     A.size();     //返回元素个数
     A.find(k);    //返回一个迭代器,指向键值K;
     A.lower_bound(k);    //返回一个迭代器,指向键值不小于k的第一个元素;
     A.upper_bound(k);    //返回一个迭代器,指向键值大于k的第一个元素;

    Sort()

     sort() 排序的范围是[first,last),包括first,不包括last;
    stable_sort() :当排序元素相等时,保留原来的顺序,在对结构体排序时,当
    结构体中的排序元素相等时,如果需要保留原序,可以用stable_sort().
    partial_sort():局部推荐。例如有10个数字,求最小的5个数。如果用sort(),
    需要先全部排序,再输出前5个,而用partial_sort()可以直接输出前5个。

    next_permutation()

    用法: 例如3个字符a,b,c组成的序列,next_permutation()能按字典序返回6个组合,即abc,acb,,bac,bca,cab,cba.

    每执行一次next_permutation(),就会把新的排列组合放到原来的空间里。

    他排列的范围是[first,last),包括first,不包括last。

    在使用时,初始序列一般是一个字典序最小的序列,如果不是,可以用sort()排序,得到最小序列,然后再使用next_permutation()。

  • 相关阅读:
    python 二维数组遍历
    WINFORM中treeview 节点显示不全
    C++函数式编程实现牛顿法
    C++函数式编程
    C++函数的重载
    默认形参值
    常量指针和指针常量
    C++值传递与引用传递
    C++变量和基本类型——2.3.1引用
    C++ 实参和形参
  • 原文地址:https://www.cnblogs.com/hrlsm/p/13196763.html
Copyright © 2011-2022 走看看