【c++】STL教程

article/2023/6/3 15:04:29

文章目录

  • 学习链接
  • 1. list 代码测试
  • 2. stack 代码测试
  • 3. queue 代码测试
    • 3.1 priority_queue 优先队列,最大先出
    • 3.2 改变出队优先级
  • 4. deque 代码测试
  • 5. vector 代码测试
  • 6. set 代码测试
  • 7. map 代码测试
    • 7.1 multimap 一键对多值
  • 8. sort 代码测试
  • 9.反转和随机代码测试

学习链接

链接: STL教程:C++ STL快速入门(非常详细)

1. list 代码测试

#include<bits/stdc++.h>
using namespace std;void out(int n)
{cout<<n<<endl;
}void print(list<int> s)
{//for_each(s.begin(),s.end(),out);for(list<int> ::iterator it=s.begin();it!=s.end();it++)  //for_each或者迭代器都可 out(*it); cout<<endl; 
}int main()
{list<int> one(5,3);  //赋值5个3 print(one);   //输出 3 3 3 3 3 one.push_back(19);   //插入数值 one.push_front(22); 
//	print(one);  //输出22 3 3 3 3 3 19 
//	int a[5]={1,2,3,4,5};
//	one.insert(one.begin(),a,a+3);  //insert可以插入一个数值或者一组 
//	print(one);   //输出 1 2 3 22 3 3 3 3 3 19 
//	one.remove(3);  //删掉3
//	print(one);  //输出  1 2 22 19list<int> two(3,1);
//	one.splice(one.begin(),two); //splice插入一个链表 
//	print(one);   //输出 1 1 1 1 2 22 19
//	one.sort();
//	print(one); one.sort();two.sort();one.merge(two); //合并,最好之前先排序 print(one);   //输出 1 1 1 3 3 3 3 3 19 20one.unique();   //去重 print(one);  //输出  1 3 19 20 return 0;} 

栈先进后出,队列先进先出
两者在 top 和 front 不同

2. stack 代码测试

#include<bits/stdc++.h>
using namespace std;int main()
{stack<int> s;for(int i=0;i<5;i++)s.push(i);  //入栈cout<<s.size()<<endl;  //输出5 while(!s.empty()){   //若栈为空,返回ture cout<<s.top()<<endl;  //栈不能随机访问,只能从栈顶访问   输出 4 3 2 1 0 s.pop();    //删除栈顶 ,出栈}cout<<s.size()<<endl;  //上一步删除完了,so输出0 return 0;
}

3. queue 代码测试

#include<bits/stdc++.h>
using namespace std;int main()
{queue<int> q;for(int i=0;i<5;i++)q.push(i);  //入队 cout<<q.size()<<endl;  while(!q.empty()){   cout<<q.front()<<endl;  // 输出 0 1 2 3 4q.pop();    //第一个元素出队 }cout<<q.size()<<endl;  //输出0 return 0;
}

3.1 priority_queue 优先队列,最大先出

出队使用 top

#include<bits/stdc++.h>
using namespace std;int main()
{priority_queue<int> q;for(int i=0;i<5;i++)q.push(i);  //入队 q.push(10);while(!q.empty()){   cout<<q.top()<<endl;  // 输出 10 4 3 2 1 0q.pop();    //出队 }return 0;
} 

3.2 改变出队优先级

#include<bits/stdc++.h>
using namespace std;struct goods{  //goods商品 double w; //质量 double v;  //价格 
}g[10]; //符号的重载
bool operator <(const goods &a,const goods &b)
{return a.v>b.v;  //价格越小越优先 
}int main()
{priority_queue<goods> q;for(int i=0;i<5;i++){cin>>g[i].w>>g[i].v;q.push(g[i]);  //入队 }while(!q.empty()){   cout<<q.top().w<<' '<<q.top().v<<endl;  q.pop();    //出队 }return 0;
}

4. deque 代码测试

#include<bits/stdc++.h>
using namespace std;void print(deque<int> dq)
{deque<int>::iterator it;for(it=dq.begin();it!=dq.end();it++){cout<<*it<<endl;}
}int main()
{deque<int> dq;for(int i=0;i<5;i++){dq.push_front(i);}print(dq);  //输出 4 3 2 1 0dq.clear();for(int i=0;i<5;i++){dq.push_back(i);}print(dq);  //输出 0 1 2 3 4for(int i=0;i<2;i++){dq.pop_back();}print(dq);  //输出 0 1 2 return 0;
}

5. vector 代码测试

#include<iostream>
#include<vector>
using namespace std;void print(vector<int> a)
{for(int i=0;i<a.size();i++){cout<<a[i]<<' ';}cout<<endl;
}int main()
{vector<int> a;for(int i=1;i<10;i++)a.push_back(i);print(a);vector<int>olda(a); for(int i=1;i<3;i++)a.pop_back();print(a);a.insert(a.begin()+2,100);print(a);int b[3]={0};a.insert(a.begin(),b,b+2);  //参数:b表示数组第0个元素 print(a);a.swap(olda);print(a);a.erase(a.begin()+2,a.end()-2);print(a); return 0;
}

6. set 代码测试

#include<iostream>
#include<set>
using namespace std;void print(set<int> a)
{set<int>::iterator it;for(it=a.begin();it!=a.end();it++)cout<<*it<<' ';cout<<endl;
}int main()
{set<int> a;for(int i=10;i>0;i--)a.insert(i);     //自动排序 print(a);a.insert(80);a.insert(5);   //set中如果插入一个有的数,则什么也不做,但是multiset 可以插入相同数据 print(a);a.erase(5);print(a);return 0;
}

7. map 代码测试

#include<iostream>
#include<map>
using namespace std;map<string ,int> count;
string s;void print(map<string,int> count)
{map<string,int>::iterator it;for(it=count.begin();it!=count.end();it++){cout<<it->first<<'\t'<<it->second<<endl;  //注意 }cout<<endl;
}int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>s;count[s]++;}print(count);count.insert(make_pair("abc",1));  //map一个键只能对应一个值 print(count); return 0;} 

7.1 multimap 一键对多值

#include<iostream>
#include<map>
using namespace std;multimap<string ,int> count;
string s;void print(multimap<string,int> count)
{multimap<string,int>::iterator it;for(it=count.begin();it!=count.end();it++){cout<<it->first<<'\t'<<it->second<<endl;  //注意 }cout<<endl;
}int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>s;count.insert(make_pair(s,i));  //输入的方法变了 }print(count);count.insert(make_pair("abc",4));  print(count); return 0;} 

8. sort 代码测试

#include<bits/stdc++.h>
using namespace std;void print(int a[],int n)
{for(int i=0;i<n;i++)cout<<a[i]<<' ';} //自定义符号 
bool cmp(int a,int b)
{return a<b;
}int main()
{int a[10];for(int i=0;i<10;i++){a[i]=i;}//sort(a,a+10,greater<int>());  //less sort(a,a+10,cmp);print(a,10);return 0;
}

9.反转和随机代码测试

#include<bits/stdc++.h>
using namespace std;void print(vector<int> a)
{for(int i=0;i<a.size();i++)cout<<a[i]<<' ';cout<<endl;
}int main()
{vector<int> a;for(int i=0;i<10;i++)a.push_back(i);print(a);  //输出 0 1 2 3 4 5 6 7 8 9reverse(a.begin(),a.end());print(a); //输出 9 8 7 6 5 4 3 2 1 0random_shuffle(a.begin(),a.end());print(a); //输出 1 8 0 7 9 4 2 6 5 3return 0;} 
http://www.ngui.cc/article/show-862297.html

相关文章

2022黑马SpringBoot跟学笔记(一)

2022黑马SpringBoot跟学笔记一SpringBoot1.SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.4 进行测试1.1.2 对比1.1.3 官网构建工程1.1.3.1 进入SpringBoot官网1.1.3.2 选择依赖1.1.3.3 生成工程1.1.4…

【Java】int和Integer的区别?为什么有包装类?

int和Integer的区别&#xff1f;为什么有包装类&#xff1f; java是一种强类型的语言&#xff0c;所以所有的属性都必须要有一个数据类型。 PS&#xff1a;java10有了局部变量类型推导&#xff0c;可以使用var来代替某个具体的数据类型&#xff0c;但是在字节码阶段&#xff0…

第6章 Mac OSX 平台安装 MongoDB教程

Mac OSX 平台install MongoDB MongoDB 提供了 OSX 平台上 64 位的install 包&#xff0c;陛下可以在官网download install 包。 download 地址&#xff1a;https://www.mongodb.net/download-center#community 从 MongoDB 3.0 版本开始只支持 OS X 10.7 (Lion) 版本及更新版本…

DaVinci:限定器

调色页面&#xff1a;限定器Color&#xff1a;Qualifier限定器 Qualifier用来选择画面上特定的像素&#xff0c;并由此创建蒙版&#xff0c;以便于二级调色。使用限定器调板左上角的“拾取器”吸管&#xff0c;在检视器画面上要选择的颜色上点击或拖动。通过检视器面板左上角的…

C语言学习笔记-枚举

C enum(枚举) 枚举是 C 语言中的一种基本数据类型&#xff0c;它可以让数据更简洁&#xff0c;更易读。 枚举是用来干嘛的&#xff1f; 枚举在C语言中其实是一些符号常量集。直白点说&#xff1a;枚举定义了一些符号&#xff0c;这些符号的本质就是int类型的常量&#xff0c;每…

Linux之(20)arp命令

Linux之(19)IP命令总结 Author&#xff1a;OnceDay Date&#xff1a;2023年2月4日 漫漫长路&#xff0c;有人对你微笑过嘛… 参考文档&#xff1a; arp(8) - Linux manual page (man7.org)、彻底搞懂系列之&#xff1a;ARP协议 - 知乎 (zhihu.com)RFC 826: An Ethernet Add…

分享五款名不见经传但是非常实用的小众软件

我们在使用一些流行的软件的时候&#xff0c;往往会忽略一些知名度不高但是功能非常强大的软件&#xff0c;有的是因为小众&#xff0c;有的是因为名不见经传&#xff0c;总之因为不出名&#xff0c;有许多的好用的软件都不为大众所知道。 1. 多窗口管理——Multrin Multrin …

GcExcel-JAVA 6.0.3-Documents for Excel

在更短的时间内生成 Excel 电子表格&#xff0c;不依赖于 Excel&#xff01; 在任何应用程序中转换、计算、格式化和解析电子表格。快速高效&#xff1a;其轻巧的尺寸意味着 Documents for Excel 针对快速处理大型 Excel 文档进行了优化使用适用于 Windows、Linux 和 Mac 的 J…

ESP32 Arduino 学习篇(五)TFT_eSPI库

前期准备&#xff1a;1.TFT_eSPI库的安装首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。2.TFT_eSPI库的配置文件配置该库有User_Setup.h和 User_Setup_Select.h两个配置文件&#xff0c;支持 ①自定义参数或 ②使用已有配置 驱动TFT屏幕。User_Setup.h — 由自己定…

Python:最少刷题数

问题描述 小蓝老师教的编程课有 N 名学生, 编号依次是 1…N 。第 i 号学生这学期 刷题的数量是 Ai​ 。 对于每一名学生, 请你计算他至少还要再刷多少道题, 才能使得全班刷题 比他多的学生数不超过刷题比他少的学生数。 输入格式 第一行包含一个正整数 N 。 第二行包含 N …