STL---对STL中的各类常用函数的小总结

STL = Standard Template Library,标准模板库惠普实验室开发的一系列软件的统称。它是由Alexander
Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。

向量(vector) 连续存储的元素<vector>

列表(list) 由节点组成的双向链表,每个结点包含着一个元素<list>

双队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque>

集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>

多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>

(stack) 后进先出的值的排列 <stack>

队列(queue) 先进先出的值的排列 <queue>

优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>

映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>

多重映射(multimap) 允许键对有相等的次序的映射 <map>

-------摘自百度百科

STL常用到的头文件:

<span style="font-size:18px;">#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>//算法
#include <queue>//队列
#include <map>
#include <deque>//双端队列
#include <vector>
#include <stack>//栈
#include <iterator>//迭代器</span>

一、优先队列

priority_queue模板类有三个模板参数,下面介绍两种:

//元素类型
priority_queue<int>q;

//容器类型
//1.从小到大排列
priority_queue<int,vector<int>,greater<int> >q;
//2.从大到小排列
priority_queue<int,vector<int>,less<int> >q;

优先队列,使用示例:

 priority_queue<int,vector<int>,greater<int> >q;
        for(int i=0;i<10;i++)
        {
            scanf("%d",&a);
            q.push(a);
        }

        while(!q.empty())
        {
            x = q.top();
            q.pop();
            if(q.empty())
                break;
            printf("%d ",x);
        }

如上述代码,若输入:1,5,4,7,2,9,8,3,10,6这随机排列的是个数

输出时,直接就会输出:1,2,3,4,5,6,7,8,9,10

若定义的时候,把greater换做less,

输出时,直接就会输出:10,9,8,7,6,5,4,3,2,1

这就是我理解的优先队列的好处(PS:可能还有别的,如果我知道我会再加)。

q.push(a);即将a压入优先队列q,压入之后也是会直接到按顺序应该在的位置。

访问优先队列的队首元素 q.top() ;

出队列: q.pop();

入队列: q.push(x);

判断优先队列是否为空: q.empty();

(以下的map,跟set来自会神)

二、map

map是键-值对的集合。map类型通常可理解为关联数组。

一个字典树的经典题,用字典树写的,要大概90行,用map只要40就够了,

没错,map就是这么的好用,

map的头文件 :#include<map>;

map对象的定义:

 map<string,int>q;
 map<int,int>q;
 map<string,node>q;
 map<int,node>;
 map<int,string>q;

map添加元素:

如:

map<int,string>q;
 q[100]=”adnsnd”;
//还可以:
q.insert(pair<int,string>(100,”adnsnd”));
q.insert(map<int,string>::value_type(100,”adnsnd”)) ;

map查找并读取元素:

如map<int,string>q;

最简单的方法:int n=q[“dadad”];

q.count(x); 返回q中x出现的次数。

判断q中x是否出现过可以这样:

if(q.find(x)==q.end()) //x在没有在q中出现过。

使用迭代器判断:

map<int,string>::iterator it=q.find(x);

if(it!=q.end()) //x在q中出现过。

map中删除元素:

q.erase(x)//删除q中键为x的元素。返回size_type类型的值,表示删除的元素的个数。

map对象的迭代遍历:

map<int,string>::const_iterator it=q.begin();

While(it!=q.end())

{

printf(“%d %d\n”,it-first,it-second);

it++;

}

三、set

头文件:#include<set>

set对象的定义:set<int>ivec;

set中添加元素:

ivec.insert(10);

set中获取元素

ivec.find(x);

判断x是否在ivec中出现过可以用:

ivec.find(x);

也可以用 ivec.count(x);

这里count的返回值只能是1或0。

set的遍历;

set<int>::iterator it=ivec.begin();

While(it!=q.end())

{

printf(“%d ”,*it);

it++;}

set的删除元素:

it=ivec.find(x);

ivec.erase(it);

set 的lower_bound/upper_bound的用法:

使用迭代器 set<int>::iterator itlow,itup;

itlow=ivec.lower_bound(x);

itup=ivec.upper_bound(x);

lower_bound返回的是在ivec中大于或等于x的第一个数的位置,

upper_bound返回的是在ivec中大于x的第一个数的位置;

STL---对STL中的各类常用函数的小总结

时间: 2024-08-10 19:05:12

STL---对STL中的各类常用函数的小总结的相关文章

c++中string的常用函数说明

string可以说是是字符数组的升级版,使用更加啊方便,不容易出错.本文对string的常用函数进行简单介绍,做到会用即可. string中的常用函数分为四类,即赋值,添加,比较和删除. 一.赋值 1.str="adf" 2.str.assign("adf");str.assign(str1);//将括号中的字符串赋值给str: str.assign(str1,1,4);//将str1的1-4赋值给strs: str.assign(5,'a');//将五个a赋值给s

SQL Server中截取字符串常用函数

SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截取最左边的字符数' ) 返回从字符串左边开始指定个数的字符 select LEFT('SQL_Server_2008',4 ); 返回结果:SQL_ 2.RIGHT ( character_expression , integer_expression ) 函数说明:RIGHT ( '源字符串'

c++ &lt;string.h&gt;中包括哪些常用函数

常用函数如下:strlen  求字符串长度strcmp  比较2个字符串是否一样strcat           字符串连接操作strcpy            字符串拷贝操作strncat    字符串连接操作(前n个字符)strncpy    字符串拷贝操作(前n个字符)strchr  查询子串strstr   查询字串

C++标准模板库(STL):algorithm头文件的常用函数之sort()函数

sort()-排序函数 顾名思义,sort就是用来排序的函数,它根据具体情形使用不同的排序算法,效率很高.一般来说,不推荐C语言中的qsort函数,原因是qsort用起来比较麻烦,涉及很多指针的操作.而且sort在实现中规避了经典快速排序中可能出现的会导致实际复杂度退化到O(n2)的极端情况 1. 如何使用sort排序 sort函数的使用必须加上头文件"#include<algorithm>"和"using namespace std;",其使用的方式如

STL入门学习中碰到的一些函数

2020.02.10 fill #include<algorithm> vector<int> v{ 1, 2, 3, 3 }; fill(v.begin(), v.end(), 4);//正向迭代器 cout << v.size() << endl; for (auto x : v) cout << x << " "; fill_n #include<algorithm> vector<int&

oracle中110个常用函数介绍

1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C --

PHP中的一些常用函数收集

<?php //===============================时间日期=============================== //y返回年最后两位,Y年四位数,m月份数字,M月份英文.d月份几号数字,D星期几英文 $date=date("Y-m-d"); $date=date("Y-m-d H:i:s");//带时分秒 //include,include_once.require,require_once //require("

Java中Math类常用函数总结

Java中比较常用的几个数学公式的总结: //取整,返回小于目标函数的最大整数,如下将会返回-2 Math.floor(-1.8): //取整,返回发育目标数的最小整数 Math.ceil() //四舍五入取整 Math.round() //计算平方根 Math.sqrt() //计算立方根 Math.cbrt() //返回欧拉数e的n次幂 Math.exp(3); //计算乘方,下面是计算3的2次方 Math.pow(3,2); //计算自然对数 Math.log(); //计算绝对值 Mat

PHP中的MYSQL常用函数(php下操作数据库必备)

1.mysql_connect()-建立数据库连接 格式: resource mysql_connect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]]) 例: $conn = @mysql_connect("localhost", "username", "password") or die("不能连接到Mysql