C++之STL

一、STL简介

      从根本上说,STL ( Standard Template Library,标准模板库)是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。STL的目的是标准化组件,在C++标准中,STL被组织为下面的17个头文件:<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<number>、<queue>、<set>、<unordered_set>、<stack>和<utility>。

      STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

二、常用容器及其用法介绍

1、deque双端队列

        deuqe是 一种具有队列和栈的性质的数据结构,看起来比较灵活,但是实际使用却不如栈和队列。

        动态数组deque既可以在数组的开头和结尾插入和删除数据,其余操作与vector相似

      

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int main()
{
    deque<int> a;
    a.push_back(3);//从后面加入数据
    a.push_back(4);
    a.push_back(5);
    a.push_front(2);//从前面加入数据
    a.push_front(1);
    a.push_front(0);
    for(int i=0;i<a.size();i++)
    {
        cout<<"第"<<i<<"个元素为"<<a[i]<<endl;
    }
    a.pop_front();//pop最前的数据
    a.pop_back();//pop最后面的一个数据
    cout<<"第二次遍历"<<endl;
     for(int i=0;i<a.size();i++)
    {
        cout<<"第"<<i<<"个元素为"<<a[i]<<endl;
    }
    deque<int>::iterator i;//定义一个迭代器
    for(i=a.begin();i<a.end();i++)//使用迭代器进行遍历
    {
        //使用distance来计算此位置和开始位置的距离来计算下标
        //distance在algorithm头文件中
        size_t nOffset=distance(a.begin(),i);
        cout<<nOffset<<"下标:"<<*i<<endl;
    }
}

2、priority_queue优先级队列

如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构。默认情况下是最大值优先

//优先级队列
#include<iostream>
#include<queue>
#include<deque>
using namespace std;
int main()
{
    priority_queue<int> pq;//优先级队列,默认用vector,默认最大值优先级队列
    priority_queue<int,deque<int> > pq2;
    priority_queue<int,vector<int>,std::greater<int> > pq3;
    pq.push(10);
    pq.push(15);
    pq.push(5);
    pq.push(25);
    cout<<pq.size()<<endl;
    cout<<pq.top()<<endl;

    while(!pq.empty())
    {
        cout<<pq.top()<<" ";
        pq.pop();
    }
    cout<<endl;
    cout<<"最小级优先级队列"<<endl;
    pq3.push(10);
    pq3.push(15);
    pq3.push(5);
    pq3.push(25);
    cout<<"大小"<<pq3.size()<<endl;
    cout<<"top"<<pq3.top()<<endl;
     while(!pq3.empty())
    {
        cout<<pq3.top()<<" ";
        pq3.pop();
    }
    cout<<endl;
    return 0;
}



3、bitset

bitset除了可以访问指定下标的bit位以外,还可以把它们作为一个整数来进行某些统计

可以如下声明一个该类型变量:
&n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值