快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

STL(C++)应用-创新互联

定义:

   STL是Standard Template Library的简称。从根本上说,STL是一些"容器"的集合,这些"容器"有list,vector,set,map等,STL也是算法和其他一些组件的集合。

站在用户的角度思考问题,与客户深入沟通,找到兴化网站设计与兴化网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名与空间、网络空间、企业邮箱。业务覆盖兴化地区。

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

 STL结构图:

在这里插入图片描述

STL 应用       one.头文件:                    include作用:在include的地方,把头文件里的内容原封不动的复制到引用该头文件的地方。

 头文件引用:头文件引用有两种形式:#include< stdio.h>和 include "main.h"。
用< >引用的一般是编译器提供的头文件,编译时会在指定的目录中去查找头文件。用" "引用的一般是自己写的头文件,编译时,编译器会在项目所在的文件夹中进行查找。
 总结:系统提供的头文件用< >引用, 自己写的用” "引用。
  格式:

#define XXX
#ifndef 
   XXX
#endif

           常用头文件:

#include//万能头
#include#include#include#include#include 
#include#include#include#include#include

 详细应有可看:C语言头文件_init33的博客-博客_c语言头文件

two.排序:                   快排(sort):   sort是STL中自带的排序函数      复杂度  O(n log n)

格式:sort(要排序元素的起始地址,要排序元素的结束地址,比较函数);

代码:(从小到大)
#includeusing namespace std;
int n,a[100010];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++) cout<
从大到小:加一个判断函数即可
#includeusing namespace std;
int f[100010],n;
int main() {
    cin>>n;
    for(int i=1;i<=n;i++) cin>>f[100010];
    sort(f+1,f+n+1,greater());
    for(int i = 1;i<=n;i++) cout<
或:
#includeint n,f[100010];
bool cmp(int a,int b){ return a>n;
    for(int i=1;i<=n;i++) cin>>f[i];
    sort(f+1,f+n+1,cmp);
    for(int i=1;i<=n;i++) cout<
 结构体排序:
#includestruct node{int x,y,t;}p[100010];
bool cmp(node a,node b){return a.t>n;
    for(int i=1;i<=n;i++) cin>>p[i].x>>p[i].y,p[i].t=p[i].y-p[i].x;
    sort(p+1,p+n+1,cmp);
    for(int i=1;i<=n;i++) cout<
  three.容器                         ① map    写法:map<基本数据类型,基本数据类型>(不需要一样)X

  map常用于打标记     map可以看作是一个无限长度的数组

 基本构造函数:

map< string , int >mapstring; 
map< int , string >mapint;
map< sring , char >mapstring; 
map< char , string >mapchar;
map< char , int >mapchar;
map< int , char >mapint;

举个例子:

mapp;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>s>>x,p[s]=x;
    cin>>y>>l;
    if(p[y]==l) cout<<"Yes";
    else cout<<"No";
}

② vector    初始化 :vector<基本数据类型>k;

使用操作:

1.   属性操作

v1.size()      //v1内已经存放的元素的数目
v1.capacity()    // v1现有的在存储容量(不再一次进行扩张内存空间的前提下)
v1.empty()     // 判断v1是否为空
v1.max_size()    // 返回vector可以存放的大元素个数,一般这个数很大,因为vector可以不断调整容量大小。
v1.shrink_to_fit()  // 该函数会把v1的capacity()的大小压缩到size()大小,即释放多余的内存空间。

2.访问操作

v1[n]        // 通过下标进行访问vector中的元素的引用 (下标一定要存在 ,否则未定义,软件直接崩了)
v1.at(n)       // 与上面类似,返回下标为n的元素的引用,不同的是,如果下标不存在,它会抛出out_of_range的异常。它是安全的,建议使用它。
v1.front()      // 返回vector中头部的元素的引用(使用时,一定要进行非空判断)
v1.back()      // 返回vector中尾部的元素 引用(使用时,一定要进行非空判断)

  3.添加操作

v1.push_back(a)        //在迭代器的尾部添加一个元素
v1.push_front(a)        // vector不支持这个操作
v1.insert(iter,  a)        // 将元素a 插入到迭代器指定的位置的前面,返回新插入元素的迭代器(在c++11标准之前的版本,返回void)
v1.insert(iter, iter1, iter2)       //把迭代器[iterator1, iterator2]对应的元素插入到迭代器iterator之前的位置,返回新插入的第一个元素的迭代器(在c++11标准之前的版本, 返回空)。

 4.删除操作

v1.erase(iterator)     // 删除人人迭代器指定的元素,返回被删除元素之后的元素的迭代器。(效率很低,最好别用)
v1.pop_front()       //vector不支持这个操作
v1.pop_back()      //删除vector尾部的元素 , 返回void类型 (使用前,一定要记得非空判断)
v1.clear()         //清空所有元素

5.代替操作

v1.assign({初始化列表})    // 它相当于赋值操作,
v1.assign(n, T)        // 此操作与初始化时的操作类似,用个n T类型的元素对v1进行赋值
v1.assign(iter1, iter2)     // 使用迭代器[iter1, iter2]区间内的元素进行赋值(该迭代器别指向自身就可以),另外,只要迭代器指的元素类型相同即可(存放元素的容器不同,例如:可以用list容器内的值对vector容器进行assign操作,而用 "=" 绝对做不到的。
v1.swap(v2)      // 交换v1与v2中的元素。  swap操作速度很快,
 ③ 队列(queue)  先进先出 初始化:queue<基础类型>X

基本操作:

q.push(x);      //入队,将元素 x 从队尾插入(尾插法)
        q.pop();        //出队,删除对首元素,并返回其值
        q.size();       //返回队中元素个数
        q.front();      //返回对首元素
        q.back();       //返回队尾元素
        q.empty();      //判断是否为空(空返回 1,非空返回 0)

优先队列(priority_queue)是一种会按照默认或自定义的优先级进行自动排序的队列,其特点是优先级高的元素排在队首,低的排在队尾。

④ 栈(stack) 

 栈就像一个盒子,可以放入或去除元素,但是要把盒子底下的东西取出来,就必须先取出上面的东西。

 生动动画:请添加图片描述

图片来源:知乎:不淡定的小淡定 

  栈

 栈的定义:

stack<类型(可以不写)>st;
或者stack st;
 函数:
代码	含义
push()	压栈,增加元素 O(1)
pop()	移除栈顶元素 O(1)
top()	取得栈顶元素(但不删除)O(1)
empty	检测栈内是否为空,空为真 O(1)
size()	返回stack内元素的个数 O(1)
 ⑤二分查找

A .lower_bound函数

 查找的数组下标 = lower_bound(数组要查找的开始位置,数组要查找的结束位置后面,要找的数) – 数组开始位置(一般写数组名);

B.upper_bound函数        快速二分查找出第一个大于指定数的位置(下标)

  C.binary_search:查找数组内某个元素是否出现。

void binary_search(数组首地址,结束地址,要查找的数)

返回值为bool类型,找到了返回true。

 ⑥pair   只含有两个元素,可以看作是只有两个元素的结构体。
pairp[20]
cout<
  ⑥unique()去重

 函数原型:unique(起始地址, 末尾地址, fun);其中fun为自定义的函数名。

  注意:unique函数去重并不是真正的去重,它是不断的将后面不重复的元素覆盖前面重复的元素,最后返回最后一个不重复的元素的地址。

如果要真的去重,需要erase();

  代码:

#includeusing namespace std;
int main(){
    vectorvec={1,1,2,3,3,4,4,5};
    auto pos=unique(vec.begin(), vec.end());
    vec.erase(pos, vec.end());
    for(int v:vec) cout<
总结:STL真的''千奇百怪'',相信大家看完之后对STL会有更深的理解,如果有什么不足之处,欢迎大家指出。

参考资料:

STL(模板库)_360百科

【C++】STL应用(详解)_打代码能当饭吃?的博客-博客_c++stl基础及应用

C语言头文件详解_正在起飞的蜗牛的博客-博客_c语言头文件

c++STL库最详细介绍(保姆级教学)_我要取个特别特别特别特别特别特别长的名字的博客-博客_c++ stl库

c++常见的几种排序_假如我年少有为的博客-博客_c++排序

C++ map函数_Water_Coder的博客-博客_c++ map函数

C++中常用的std标准容器(全部容器功能介绍)_流楚丶格念的博客-博客_std 容器

STL函数大全_FoLiaGe丶的博客-博客_stl函数

【数据结构】栈(stack)-顺序栈(动态图解、c++、java)_URLeisure的博客-博客_进栈出栈顺序图解

c++stl库函数_列出C ++ STL(标准模板库)中的函数_cumtv80668的博客-博客

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页题目:STL(C++)应用-创新互联
新闻来源:http://6mz.cn/article/gpshh.html