第六次
ACM总结这是开学后的第二次总结,距离上一次写总结已经一个星期了。正式上ACM选修课也俩个星期了。
在这俩个星期里我主要就是看算法笔记,以及老师给我们发的资料。还有就是上课的时候学习的STL容器里面的栈和队列还有动态数组以及优先队列。
算法笔记的前一部分好多内容都是我们上个学期学过的内容。我现在看到的新的内容,就是指针和引用了。
指针:
1、指针的定义方式是int* p;可以直接后面加一个变量的地址来初始化。
2、还可以以后赋值,但接下来赋值的时候就是p=&a;因为p才是变量名,*是类型中的一部分。
3、如果前面加上*那就是在给这个地址赋值,改变这个地址里的内容。
4、如果想要拿出这个地址里面的内容,则需要在*p,用*来解开拿值。
5、指针也可以进行增减,也就是可以指向上一个或下一个指针。
6、当指针指向数组的时候,因为数组的名称就是数组的首地址。可以直接int *p=a;同时在数组中,&a[i]和a+i是等价的。
7、当然指针也可以作为函数的参数来传入函数。但在函数里面改变这个值的话,主函数里面的值也会随着改变。
引用:引用就是给一个变量另外取一个名字。引用需要在变量前面加上&;但引用不是取地址的意思。
对于结构体中的指针变量,可以用(*p).id或者用p->id来表示。
还有对于浮点数的比较,不能直接用==,而是需要看俩个浮点数的差值是否在一个很小的范围之内。对于与浮点数有关的大于小于之类的和等于的比较方法类似。
还有关于复杂度的一些内容,有时间复杂度还有空间复杂度以及编码复杂度。计算机一秒的运行次数大概是10^7~10^8,所以有时候我们需要选择合适的算法来编写,防止超时或超出空间。
算法笔记上接下来就是模拟了。
模拟:简单的模拟,按我的理解就是有一个实际情况,我们根据这个实际情况选择合适的方法模拟出这个过程。
查找元素,可以遍历一遍数据,也可以使用简便的二分查找。
图形输出,我感觉这个是最像模拟这个说法的,就是按照要求输出一个图形。
日期的处理,通过这一部分的学习,我了解到可以想建一个数组,来分别存储闰年和不是闰年的俩种情况下的十二个月的天数,以便接下来用到某月的日期时可以直接使用。
进制转换,其他进制转换为十进制这是,每个位数上的数字乘以相应的次方。8进制乘以8的各种次方。。十进制转换为其他进制就是换成多少机制就除以多少进制,然后取模。(注意是倒着读写)。
字符串的处理。对于char类型的字符串可以用<cstring>头文件下的strlen函数来得到字符串的长度。
接下来的学习内容就是STL里面的内容了。
栈:stack<int>s; 只能一段进或出
s.push(a):栈顶加入a。s.empty():返回的是布尔类型。
s.size():返回栈中元素的个数。
s.pop():删除栈顶
s.top():返回栈顶的值
队列:queue<int>p; 一端进,另一端出
p.front():返回队首。
P.back():返回队尾。
优先队列(priority_queue)和普通队列之间的区别就是优先队列可以自己安排最优级,可以不按顺序出列。
动态数组:vector<int>v;
和普通数组的区别就是可以变换长度。
push_back(a):尾部加上a。
pop_back():尾部删除。
以上就是我这个俩周的大概学习内容了,以及一些心得。加油😊