C++ STL的简单运用——学习记录

     本周学了一下STL,学的内容有string,stack,queue,vector,priority queue,map,set与其简单应用, 速度比较快,,还好学之前我预习了一些,,,在学的过程中有这么两个地方我觉得应该特别注意一下——重载运算符和sort。下面我将对这两个内容着重介绍一下,然后对本周其他学习的内容进行简单的记录。
    重载运算符
    个人理解:是一个特殊的函数,当匹配到对应的数据类型和对应的运算符时用新的运算规则来进行运算
代码举例

/*结构体内重载*/
#include <bits/stdc++.h>using namespace std;
struct coord
{int x,y;const bool operator </* 这里的 "<"在类内,注意是在类内,被重新定义运算*/ (const coord &b/*传入类型*/)const/*当匹配到“<”和对应类型时此段特殊的函数将自动运行*/{/*此处为新的运算规则*/if(x!=b.x){return x>b.x;}else{return y<b.y;}}
};
int main()
{priority_queue<coord> c ;/*优先队列总是会让“最大”数值排在队首,可以用重载运算符来改变其规则,试着把“最小”数值排在队首*/coord a;for(int i=0;i<3;i++){cin>>a.x>>a.y;c.push(a);/*压入元素*/}for(int i=0;i<3;i++){cout<< c.size()<<endl;cout<< c.top().x<<" "<<c.top().y<<endl;c.pop();}return 0;}
/*运行结果
4 5
2 0
1 2
3 成员数量
1 2  成员内容
2
2 0
1
4 5
*/
/*
有一点说明一下,因为优先队列的排序也并不特殊,你给出一个结构体类型里面包含多个数据没法排
所以这里的重载应该是必要的。*/

sort
    年少不知sort好,错把冒泡当成宝。
    关于sort这个排列函数,普通简单用法有直接用sort(begin,end),实现升序排序。其他的还有通过函数实现自定义排序比如按照各位大小排,按照十位大小拍,如此很容易想到和结构体关联,实现对结构体数组的排序。

/*普通运用就不说了,,直接看一下与函数关联的*/
#include <bits/stdc++.h>
using namespace std;
bool cmp(int x,int y)
{
return x>y;
}
int main()
{int a[100];int n;cin>>n;srand(time(0));for(int i=0;i<n;i++){a[i]=rand()%10;}sort(a,a+n,cmp);for(int i=0;i<n;i++){cout<<a[i]<<" ";}cout<<endl;
}
/*运行结果
5
8 6 2 0 0Process returned 0 (0x0)   execution time : 1.480 s
Press any key to continue.
*/
/*或者说你要是想改变排序规则可以直接改变cmp里面的函数体*/

     然后是和结构体关联

/*我好懒,不写新的了,拿上回写的代码来弄吧*/
#include <bits/stdc++.h>using namespace std;struct person
{string name;int count;
}leader[3]={"特朗普",0,"普朗特",0,"朗普特",0}/*此处定义了结构体数组并且初始化了*/;
bool cmp(person x,person y)
{return x.count<y.count;/*此处根据选票高低进行结构体数组的排序*/
}
int main()
{cout<< "请输入选民个数"<<endl;int t;for(cin>>t;t;t--){cout<<"请进行选择,1是特朗普,2是普朗特,3是朗普特,非法输入视为弃权"<<endl;int a;cin>>a;switch (a){case 1:{leader[0].count++;break;}case 2:{leader[1].count++;break;}case 3:{leader[2].count++;break;}default :{cout<<"非法输入视为弃权"<<endl;break;}}}sort(leader,leader+3,cmp);cout<<leader[2].name<<" 共有:"<<leader[2].count<<"票"<<endl;return 0;
}
/*可见,sort可以“牵一发而动全身”*/
/*
运行结果
请输入选民个数
1
请进行选择,1是特朗普,2是普朗特,3是朗普特,非法输入视为弃权
1
特朗普 共有:1票
*/

然后我想写写关于这周学的STL的简单应用和新学的结构体与类的相关知识中我觉得比较重要的,其中优先队列已经写过了,下面就不写了。
1. set
关于set可以直接理解为一个不重复的有序数组(默认升序),当外界想要插入内部已有的元素时是无法插入的。
set 简单应用
学会了用迭代器,美滋滋~

#include <bits/stdc++.h>using namespace std;
struct test
{char x,y;bool operator <(const test &b)const{if(x==b.x){return x>b.x;}else{return y>b.y;}}
};
int main()
{cout<<"想要测试几组?"<<endl;int t;for(cin>>t;t;t--){test test1;set <test> s1;set <test>::iterator iter;cout<<"input:"<<endl;for(int i=0;i<3;i++){cin>>test1.x>>test1.y;s1.insert(test1);}cout<<"output:"<<endl;for(iter=s1.begin();iter!=s1.end();iter++){cout<<(iter->x)<<" "<<(iter->y)<<endl;/*注意“->”符号的运用*/}}return 0;
}/*用几组输入输出来说明一下
想要测试几组?
4
input:
4 5
5 4
4 4
output:
4 5
5 4
input:
4 4
4 5
5 4
output:
4 4
input:
1 2
2 3
3 4
output:
3 4
2 3
1 2
对比前两组可以看到只有当结构体两个数据都不一样的时候set才会判定是不重复元素
看最后一组输入输出会发现,这个实现了降序,这里就是重载运算符起了作用
*/

2.vector
动态数组,这个东西比较好用。在增删元素都有比较优秀的表现,你一开始开了个10大小的空间,当空间不够用的时候会自动再追加10个大小的空间

#include <bits/stdc++.h>
/*动态数组*/
using namespace std;
int main(){vector<int> a;for (int i = 0; i < 5; ++i){a.push_back(5 - i);}cout << "大小" << a.size() << endl;a.pop_back();/*移除末端元素*/a[0] = 1;/*类似数组操作的赋值*/cout << "大小" << a.size()/*看看有多少元素*/ << endl;for (int i = 0; i < (int)a.size(); ++i){cout << a[i] << ", " << endl;}cout << endl;return 0;
}
/*
定义:vector <data_type> vector_name;如:vector <int> v;
操作:empty() -- 返回bool型,表示vector是否为空 (v.empty() )size() -- 返回vector内元素个数 (v.size() )push_back(data_type a) 将元素a插入最尾端pop_back() 将最尾端元素删除v[i] 类似数组取第i个位置的元素(v[0] )
*/

3.string
字符串类型,非常好用且方便,但是有时候会有溢出问题,需要注意,基本操作之前已经比较熟悉了我来写一下连个比较有意思的。
在这里插入图片描述fing和sting的getline

#include <bits/stdc++.h>
/*关于find的返回,返回的是一个下表,如果查找到了,就返回第一个匹配到的下表,否则就返回一个特定的nops*/using namespace std;
int main()
{int t;for(cin>>t;t;t--){string a,b="abc";cin>>a;cout<<a<<" "<<b<<endl;cout<<a.find(b)<<endl;}return 0;
}/*5
a
a abc
4294967295
b
b abc
4294967295
c
c abc
4294967295
abc
abc abc
可以看到find的匹配是全匹配,nops是一个定值
0*/

I have string
I have set
Ahhhhh~~
set < string > s;

#include <bits/stdc++.h>using namespace std;
int main()
{set <string> s;set <string>::iterator iter;s.insert("abc");s.insert("ab");s.insert("ac");s.insert("bc");cout<<"目前拥有元素"<<endl;for(iter=s.begin();iter!=s.end();iter++){cout<<*iter<<" ";}cout<<endl;cout<<"查找"<<endl;iter=s.find("bc");if(iter!=s.end()){cout<<*iter<<endl;}return 0;
}
/*
注意,如果没有查到的话迭代器会停在指向s.end(),也就是第一个无效元素地址
*/

getline

string a;
getline(cin,a);

除了这些这个周还学了一些小东西
0.

这个就没有必要代码块了,
就是在主函数外边加一个
#define MAX 1000
意思就是接下来有个MAX是1000了
#define foi for(int i=0;i<10;i++)
意思就会foi代表了后边那个for循环,以后写可以适当用一些提高速度
 1.
对数

  /*对数的函数应该是log,当我们要规定以啥为底谁的对数时可以这么写*/
#include <bits/stdc++.h>using namespace std;int main()
{int n;cin>>n;double c=log(n)/log(16);cout<<c<<endl;
}/*这就是爱~~~~(bushi)
这就是换底公式
可以用于16进制换底之类的进位的题目,找不到之前我写的那个了,,等以后找到了再补上代码*/

2.
去重函数——unique

/*主要注意两个点,一个是去重前先排序一下因为这个函数只针对相邻的元素(功能也不是很强大),另一个是去重后的元素数*/
#include <bits/stdc++.h>using namespace std;int main()
{int a[100];int t,n;cin>>n;for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);t=unique(a,a+n)-a;for(int i=0;i<t;i++){cout<<a[i]<<" ";}cout<<endl;return 0;
}
/*运行结果
6
1 1 2 2 3 3
1 2 3

3.
向上和向下取整

ceil(1.5)=2
ceil(0.5)=1
ceil(1)=1floor(10.5) = 10
/*很简单对吧*/

4.
文本输入和快速输入

文本输入,记得提交代码时一定要注销掉
freopen("in.txt","r",stdin);
快速输入ios::sync_with_stdio(false);

5.
随机输入,用于测试

#include <bits/stdc++.h>
using namespace std;
int main()
{int a[100];int n;cin>>n;srand(time(0));for(int i=0;i<n;i++){a[i]=rand()%10;}for(int i=0;i<n;i++){cout<<a[i]<<endl;}return 0;
}

2021.3.13
追随远方的某R

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/45943.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS水文分析实战教程(12)河网分级流程

ArcGIS水文分析实战教程(12)河网分级流程 本章导读&#xff1a;如果说河流提取是面对没有数据后者数据匮乏的用户&#xff0c;那么河网分级就完全属于为水文研究而生的一个工具。河流具有干流和支流之分&#xff0c;河网分级能够将这些干支关系理顺&#xff0c;并从中找到其水文…

[论文总结] 深度学习在农业领域应用论文笔记2

文章目录 1. A comparative study of fruit detection and counting methods for yield mapping in apple orchards &#xff08;IF3.581, 2019&#xff09;1.1 介绍1.2 实验与结果1.3 定性结果1.4 失败案例1.4.1 检测1.4.2 计数 1.5 结论与未来工作 2.Wheat crop yield predic…

Java 反射慢?它到底慢在哪?

往期热门文章&#xff1a; 1、GitHub 被超火的 ChatGPT 霸榜&#xff01; 2、Java使用 try catch会影响性能&#xff1f; 3、原来count(*)是接口性能差的真凶&#xff01; 4、大公司病了&#xff0c;这也太形象了吧&#xff01;&#xff01;&#xff01; 5、全球最大资源站创始…

运营人必懂 | TikTok运营指南

“TikTok之前确实很火&#xff0c;现在呢&#xff1f;” 最新数据告诉你&#xff1a; Sensor Tower商店情报数据显示&#xff0c;2022年9月抖音及海外版TikTok在全球App Store和Google Play吸金超过3.15亿美元&#xff0c;是去年同期的1.7倍&#xff0c;蝉联全球移动应用&…

抖音号运营爆量爆单技巧

泛知识付费2.0时代&#xff0c;短视频、直播间成为了知识传播的重要阵地&#xff0c;只要有技能干货&#xff0c;不论是行业大咖&#xff0c;还是精通某领域的普通人&#xff0c;都有机会成为大众的“老师”&#xff0c;依靠输出视频、音频等内容课程来知识变现。而抖音生态&am…

抖音直播运营分析必备工具!千川投放提高付费流量转化ROI

千川正式上线后的几个月&#xff0c;由于操作更简单越来越多的商家已经通过千川把新号快速的跑起来了&#xff0c;不少新号已经实现高投产比。但还有很多新手商家&#xff0c;遇到新号起号难&#xff0c;千川投放没产出等问题&#xff0c;最近讨论比较多的主要有&#xff1a; …

抖音运营方针策略

抖音&#xff0c;是一款可以拍短视频的音乐创意短视频社交软件&#xff0c;该软件于2016年9月上线&#xff0c;是一个专注年轻人音乐短视频社区平台。用户可以通过这款软件选择歌曲&#xff0c;拍摄音乐短视频&#xff0c;形成自己的作品。 抖音运营是一款社交类的软件&#xf…

抖音账号矩阵系统如何开发布局及运营?

抖音SEO&#xff0c;顾名思义抖音搜索排名优化&#xff0c;目前短视频平台如火如荼&#xff0c;抖音也凭借自身优势&#xff0c;迅猛发展&#xff0c;据相关数据统计&#xff0c;目前抖音平台日活用户已超8亿&#xff0c;抖音搜索超4亿&#xff0c;商业价值巨大&#xff0c;这无…

抖音运营经验与抖音机制分享!

如今运营抖音号&#xff0c;一个月涨了10w粉丝&#xff0c;虽然不多&#xff0c;但也是很好的开始。其实&#xff0c;要玩抖音除了要懂基本的机制&#xff0c;避开雷区外&#xff0c;还有一些小窍门&#xff0c;下面武汉新时标文化传媒有限公司总结抖音经验与抖音机制&#xff…

问答ChatGPT-4:探索未来微数据中心IDC的发展趋势

从去年年底开始到现在&#xff0c;大众对以ChatGPT-4为主的人工智能AI的话题讨论盛况空前。这是一款由OpenAI发布的聊天机器人模型&#xff0c;一经上线&#xff0c;短短5天完成100万用户积累&#xff0c;并在最近实现月活用户破亿。实际上&#xff0c;ChatGPT和智能客服、智能…

人工智能工具集合

前言 ​ 话说2023&#xff0c;可谓人工智能元年&#xff01;但是说实话&#xff0c;有部分产品达不到“人工智能”的程度&#xff0c;还停留在“计算”的层次&#xff0c;我对这方面不是专家&#xff0c;就不去评价这些应用是否算是“AI”了。不过&#xff0c;善用这些工具&am…

巴比特 | 元宇宙每日必读:28家AI企业集体赴港IPO,业绩惨谈,经营亏损,这是AI下半场的起点,还是资本炒作到顶峰的标志?...

摘要&#xff1a;当前&#xff0c;港交所通过聆讯等待IPO的排队企业一共有106家&#xff0c;其中&#xff0c;涉及AI人工智能或数字化的公司达到28家&#xff0c;占比26%。而这28家公司中&#xff0c;有18家截至2022年度的净利润为亏损&#xff0c;8家实现微盈利。 业绩惨淡&am…

AI绘画最全提示词表;独立开发者2项重要能力;AIGC发展「百科全书」;AI新时代的学习/创业/出海 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 3300提示词&#xff0c;AI作画艺术家/风格/细节的最全词表 这是AI绘画工具「画宇亩 (Nolibox Creator) 」帮助中心的一份学习文档&…

input框出现转圈问题

input框不能加type 只有select框可以加type 若想使用数字输入框,可以用InputNumber或正则表达式验证

计算机重启后一直黑屏转圈,电脑win10开机黑屏转圈十几秒怎么解决

对于Win10正式版开机等待时间长的问题&#xff0c;通常只发生在通过“升级”方式更新的Win10正式版系统中。而对于采用“全新”方式安装 的Win10正式版系统中则不会出现此类故障&#xff0c;下面一起来看看解决方法吧。 1、右击桌面左下角的“Windows”按钮&#xff0c;从其右键…

计算机重启后一直黑屏转圈,技术员教你解决win10开机无限黑屏转圈重启的解决方法...

大家在操作电脑时一定会遇到很多问题&#xff0c;比如说win10开机无限黑屏转圈重启的解决方法就是我们经常会遇到的&#xff0c;小编及身边的朋友也遇到过win10开机无限黑屏转圈重启的解决方法很多次&#xff0c;针对win10开机无限黑屏转圈重启的解决方法这样的问题&#xff0c…

html怎样让图片自动转圈,html5如何实现图片转圈的动画效果

这篇文章主要介绍了html5实现图片转圈的动画效果——让页面动起来的相关资料,需要的朋友可以参考下 1.先瞧瞧效果&#xff1a; 2.代码是这样的&#xff1a; mixin ani-btnRotate{ keyframes btnRotate{ from{transform: rotateZ(0);} to{transform: rotateZ(360deg);} } } incl…

右键文件一直转圈卡死

右键文件一直转圈卡死 1.随便打开一个电脑管理器&#xff08;比如&#xff0c;360&#xff09;&#xff1b; 2.点击搜索更多&#xff0c;搜索“右键管理”&#xff1b; 3.点开后&#xff0c;将其中不需要的右键管理删除&#xff08;如果需要恢复&#xff0c;可以点击已删除…

解决win系统点击右键时鼠标一直不停转圈操作

WinR输入regedit打开注册表编辑器&#xff0c;在HKEY_CLASSES_ROOT目录下的\Directory下找到如下图所示的文件&#xff1a; 删除除了New以外的所有其他文件即可。 如不小心删除了New文件&#xff0c;不要慌张&#xff0c;可邮件ContextMenuHandlers选择新建“项”再新建New…

Postman打开一直转圈

打开postman一直转圈圈&#xff0c;网上找的都是不解决问题。后来发现个大神完美的解决了&#xff0c;具体步骤如下&#xff1a; 1 解决方案&#xff1a;删除%appdata%目录下的postman文件。这个文件夹是隐藏的&#xff0c;建议先在地址栏输入%appdata%进入此目录 2 操作完第…