如此生活30年,直到大厦崩塌
avatar
Yxzhou

声明(置顶)

本网站属个人分享网站,非营利性网站!

青岛市·市北区
avatar
Yxzhou
  1. 头文件:#include<utility>

    像vector iostream等头文件都包含了utility头文件,所以有这些头文件的情况下,使用pair时,utility头文件可以不写,不会报错

  2. 定义方法

    pair<int,string> a;

    //表示a中有两个类型,第一个元素是int型,第二个元素是string类型。

    pair<string,string> a("James","Joy"); //直接初始化

  3. 常用操作

    (1)对于pair类,由于它只有两个元素,分别为first和second,因此直接使用普通的点操作符即可访问其成员

    pair<string,string> a("Lily","Poly");

    cout<<a.first<<" "<<a.second; //a.first返回前项,a,second返回后项

    (2)生成一个新的pair对象,可以使用make_pair对已存在的两个数据构造一个新的pair类型

    int a=8:

    string m=James";

    pair <int,string> newone:

    newone=make pair(a,m):

    (3)两个pair类型数据可以直接使用==,!=,< , <=,>,>=比较大

      小,比较规则是先以first的大小作为标准,只有当first相等时才去判别

      second的大小。pair默认对first升序,当first相同时对second升序。

avatar
Yxzhou

fill与memset类似

memset函数的格式:

memset(数组名,值,sizeof(数组名))

注意: memset需要头文件 <cstring>


memset函数的作用:将数字以单个字节逐个拷贝的方式放到指定的内存中


memset(a,127,sizeof(a))

127的二进制表示是01111111,那么在a数组里放的内容就是(十进制的2139062143)

这样就可以将数组里的全部元素初始化为一个很大的数,在最短路径问题以及其他很多算法中都是需要用到的。

avatar
Yxzhou

今天发现一个普遍的现象,阅读竟然连开放式的想象题都有标准答案,难道教育系统只能通过标准答案来评判一道题吗?甚至我觉得这都不应该是一道题,而是卷子上留的思考对吧?


难道我就连写“你想对谁谁谁说什么?”这种题的时候,都必须要是正向的吗?生活中又不是一切都是正向的吧!这难道不是一种对反面事物的逃避吗?


假如真如我所想,是对一种反面事物的逃避,就给大家分享一个短片吧,是我前几天看到的,讲的是因为父母小的时候一直为小孩传授一种思想,这种思想为:世界上一切事物都是好的,坏事都可以跳过。这个孩子长大后就不停地自残


大家都问为什么?是啊,为什么呢?他说,他以为,所有坏事都可以跳过,所以试了试。


我觉得这个短片用来形容现在的教育系统很合适,希望他们随着时间的流逝能意识到问题,剩下的我也不过多赘述了,没什么好说的



avatar
Yxzhou

上课时候根本不好好讲课,上她的课不如睡觉,上课时候的小表情简直了

scrawl_20241127210509.png

这张图十分甚至有十五分像她上课时的样子,

身子必须是弯的,小眼神必须是有的,嘴巴必须是弯的!

有很多人问我怎么敢在网上吐槽老师

问就是

scrawl_20241127210903.png


avatar
Yxzhou

虽然和爸爸睡觉也很好,但是和他睡觉总会有点不愉快,和妈妈睡觉就不会

avatar
Yxzhou

qianmowanjidebi.jpg

头文件<map>

map是STL的一个关联容器,翻译为映射,数字也是一种映射。如int

a[10]是int到int的映射,而a[5] = 25,是把5映射到25。


map映射容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间有一一映照关系。


map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来


键值映照数据
Exam: NameScore
Jack98.5
Bomi96.0
Kate97.5

map映照容器元素的数据构成示意图


普通int数组是map<int,int>a;

字母到整型的映射是map<char,int>a;

字符串到整型的映射是map<string,int>a;


作用map<int,string>   m;常用函数功能备注
查询m.at[3]或m[3]返回一个引用,指向键位3时的对应值;如果元素不存在,map会自动建立这个元素注意,它和数组下标完全不是一回事



avatar
Yxzhou

qianmowanjidebi.jpg

queue是队列的容器,需要头文件<queue>,并且必须要有"using namespace std;"

队列无法访问中间的元素,队列只能访问队首和队尾

queue<int>   q;常用函数功能
q.front(),q.back()将x入队
    front()返回队首元素;back()返回队尾元素
q.empty()判断queue是否为空,空为true,否则为false
q.size返回queue内元素个数
q.pop()队首元素出队

所有函数时间复杂度都为O(1)

注意:pop() 必须在队列不为空时使用,所以在使用之前一定先判断队列是否为空!!!!

avatar
Yxzhou

qianmowanjidebi.jpg

[猛戳我查看Excel文件]


avatar
Yxzhou

qianmowanjidebi.jpg

stack就是栈的容器,头文件<stack>,并且必须要有 using namespace std; ,但是stack只能访问栈顶

stack<int>   st;常用函数功能
st.push(x)将x入栈
st.top()获取栈顶元素
st.pop()弹出栈顶元素
st.empty()判断stack是否为空,空为true,否则为false
st.size()返回stack内元素个数


所有函数时间复杂度都为O(1)

注意:top()和pop()必须在栈不为空时使用,所以在使用之前一定要先判断栈是否为空 


avatar
Yxzhou

qianmowanjidebi.jpg

vector实际就是动态数组,头文件<vector>,并且必须要有"

using namespace std;"这行代码。随机存取任何元素都能在常数时间完成。在尾部增删元素具有较好的性能。

尾端插入和删除元素,算法时间复杂度都为O(1);其他元素插入和删除为O(n)

作用vector<int>   v;常用函数功能备注
内存分配v.capacity()当前可容纳的vector元素个数使用之前应该分配好使用空间和内存
v.reserve(n)扩大容量为n
v.at(i)返回索引所标识的元素。对i进行越界检查
v[i]返回索引所标识的元素。和数组用法几乎完全相同,不检查
元素存取v.front()返回第一个元素,不检查第一个元素是否存在
v.back()返回最后一个元素,不检查最后一个元素是否存在


作用vector<int>   v;常用函数功能备注
插入元素v.insert(pos,e)在pos位置插入元素e的副本,并返回新元素位置这三种操作涉及大量元素的移动,可能会产生严重影响效果
v.insert(pos,n,e)在pos位置插入n个元素e的副本
v.insert(pos,begin,end)在pos位置插入区间(begin,end)内所有元素的副本
v.push_back(20)尾端插入新元素的副本
作用vector<int>   v;常用函数功能备注
移除元素v.erase(pos)删除pos位置的元素,返回下一个元素的位置由vector产生的迭代器持续有效,除非产生(1)插入元素;(2)容器变化引起内存重新分配
v.erase(begin,end)删除区间(begin,end)内所有元素,返回下一个元素的位置
v.pop_back()移除最后一个元素但不返回最后一个元素
v.clear()移除所有元素,清空容器
v.resize(num)将元素数量改为num(增加的元素用默认构造函数产生,多余的元素被删除)
v.resize(num,e)将元素数量改为num(增加的元素是e的副本)
v.empty()判断是否为空,空为true,否则为false

v.size()返回元素个数