STL和基本数据结构

Posted hrlsm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()。

 

以上是关于STL和基本数据结构的主要内容,如果未能解决你的问题,请参考以下文章

STL 基本概念

STL容器自定义内存分配器

STL容器自定义内存分配器

STL容器自定义内存分配器

算法学习——STL和基本数据结构

(超详细)算法学习:STL和基本数据结构