C++中的STL标准模板库

STL( Standard Template Library)是C++程序设计语言标准模板库。

STL代码从广义上分为三类algorithm(算法)、container(容器)、iterator(迭代器)。

本文主要从关键性代码和注释中,自行体会STL中的主要函数的使用(容易)。

本文主要介绍在算法竞赛中常用的vector、map、set 和algorithm以及迭代器的简单使用

引言:

万能头文件:

#include<bits/stdc++.h>

使用此头文件可以省略所有其他头文件,可谓十分便捷。

1.向量(vector) 

STL中的Vector是一个动态数组。

Vector是一个线性顺序结构,相当于数组,可以不预先指定数组的大小并自动扩展。

头文件:

#include<vector>

用迭代器访问容器Vector中的元素。

示例1:(应用)

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector <int> v(5);//注意此处的括号规定了容器大小 但可以扩容
    int n=5;
    for(int i=0;i<n;i++)
    {
        cin>>v[i];
    }
    v.push_back(666);
    for(int i=0;i<=n;i++)
    {
        cout<<v[i]<<" ";
    }
    cout<<endl;
    cout<<v.size()<<endl;
}

2.迭代器:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector <int> v2;
    int n=5;
    int x;
    for(int i=0;i<n;i++)
    {
        cin>>x;
        v2.push_back(x);//将x追加到容器末尾
    }
    for(int i=0;i<n;i++)
    {
        cout<<v2[i]<<" ";//使用下表访问元素
    }
    cout<<endl;
    vector <int> ::iterator p;//使用迭代器引用元素
    for(p=v2.begin();p!=v2.end();p++)
    {
        cout<<*p<<" ";
    }
    cout<<endl;
    cout<<v2.size()<<endl;
    v2.pop_back();//删除容器尾元素
    cout<<v2.size()<<endl;

}

运行结果:

 2.映射(map)

map内部数据的组织是一颗红黑树,具有对数据自动排序的功能,所以map内部所有的数据的Key都是有序的。

头文件:

#include <map>
#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main()
{
    map<string,int> m;
    m.insert(make_pair("b",123));
    m.insert(make_pair("c",321));
    m.insert(make_pair("a",456));
    m["d"]=789;
    map<string,int>::iterator pm;
    for(pm=m.begin();pm!=m.end();pm++)
        cout<<pm->first<<" "<<pm->second<<endl; //first表示key second表示值
    cout<<m.size()<<endl;
}

运行结果:

 显然:排序顺序是按照key从小到大。

3.集合(set)

集合的特殊性在于它所包含的元素的唯一性,集合中的元素按照一定顺序排序。

定义和使用类似于vector。

头文件:

#include <set>

使用示例:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    set<string> s;
    s.insert("orange");//插入元素
    s.insert("apple");
    s.insert("banana");
    s.insert("orange");
    set<string>::iterator sp;
    for(sp=s.begin();sp!=s.end();sp++)
        cout<<*sp<<endl;
    cout<<s.size()<<endl;
}

运行:

显然:元素不重复,且已经按照从小到大排序 。

【注】:

迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升,提供了比指针更高级的行为,相当于一种智能指针。

4.算法(algorithm)

algorithm是C++的标准算法库,它主要应用在容器上。 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性。

因此,任何数据结构都能使用这套算法库,只要它具有相应的迭代器类型。

头文件:

#include<algorithm>

常用的成员函数:

max():求两个数最大值
min():求两个数最小值
abs():求一个数的绝对值

交换函数:swap()

排序函数:sort()(默认升序)常用

欲降序,需要自定义函数bool cmp();

应用实例:

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
    return a>b;//意思是:若a>b,则a的优先级更大! 也就是说大的在前面。
}
int main()
{
    int a,b;
    cin>>a;
    cin>>b;
    cout<<max(a,b)<<endl;
    cout<<min(a,b)<<endl;
    swap(a,b);
    cout<<a<<" "<<b<<endl;
    int d[10]={1,6,5,4,2,3,7,9,8,10};
    sort(d,d+10);//加的是容器内的元素总个数
    for(int i=0;i<10;i++)
        cout<<d[i]<<" ";
    sort(d,d+10,cmp);//cmp后不加实参
    for(int i=0;i<10;i++)
        cout<<d[i]<<" ";
    }

运行:

 以上是STL常用的类和库函数的调用,但并不全面,属于解决算法竞赛题的基本功。

【注】:容器中的栈、队列、优先队列和列表并未介绍。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值