2021-10-06

第七天

现在是21:12,有晚课,8:35才下课,回到宿舍简单收拾一下,开始。
今天学的东西感觉不是很多,但是花的时间是不少,很多东西就比较浅显的,下面直接提一下,可不是懒,因为实在是简单或者是之前已经写过相关的操作了,基本上看一遍就过了,今天看的章节数基本上跟前6天看的章节数一样多了。
还有今天是第七天,明天就要开始正式开始学数据结构啦,以前也看过数据结构,也学过一部分,但是那时候学的不是很明白,没坚持下来,就放弃了,这次学习是系统的学习。
今个中午也问了一下老师,老师的建议也是前三题先稳定住,后面确实是很有难度的,得继续加油了呀。

1.指针和数组

这里是对昨天的一些补充
指针也是迭代器

int array[] = {0,1,2,3,4,5,6,7,8,9,};
int *p = arr; //这里意思和上篇差不多,是指针p指向数组arr的第一个元素即arr[0]
++p; //指向下一个元素
标准库begin和end

数组不是类类型,所以说数组没有成员函数,和vector有一点不太一样

#include <iterator>
using namespace std;
int main(){
	int ia[] = {0,1,2,3,4,5,6,7,8,9};
	int *beg = begin(ia);
	int *last = end(ia);
	cout << *beg << " " << *last << endl; //注意last指针是指向最后一位的下一位 所以输出有误
	return 0;

}

遍历数组的另一种方法,同vector类似

while (beg != last){
	cout << *beg;
	beg++;

寻找第一个负数,简单修改一下即可

while (beg != last && *beg >= 0)
指针运算
int *ip = arr; //ip指向数组arr的第一个元素 
int *ip2 = ip + 4; //ip2指向数组arr的第五个元素

int *p = arr + sz; //不能解引用 
int *p2 = arr + 10; 

但是两个指针相减的结果是一个ptrdiff_t的标注库类型,和size_t一样,但是我觉得都跟整型是差不多的,准确的说ptrdiff_t类型应该是一种带符号类型,以为相减有可能是负值
注意:

i = *p + 2;
i = *(p + 2);

上面是指针指向的数值+2,下面是指针指向后两位的值
还有一点是不同于vector类型的,再vector类型中下表不可能是负值的,但是数组就可以
假如说

int *p = arr[3]; //p指向数组arr的第四个元素
int j = p[1]; //j的值应该是arr的第五个元素
int i = p[-1]; //i的值应该是arr的第三个元素

2.一些c风格字符串

头文件 #include <cstring>

strlen ( p )返回p的长度,不包括空字符
strcmp(s1, s2)比较s1和s2的字符串相等性
strcat(p1, p2)将p2附加到p1中,返回p1
strcpy(p1, p2)将p2拷贝给p1,返回p1

在c里面,例如if(strcmp(s1, s2) > 0)

在c++里,作用效果同 s1 > s2

c里面字符串相关使用的一个最不方便的地方,一个变量所存的字符串大小一旦改变,就必须重新检查空间是否依旧足够
选择string类型很好

使用数组初始化vector对象
int arr[] = {0,1,2,3,4,5};
vector<int> ivec (begin(arr), end(arr));

即可快速实现初始化,值是相同的

3.多维数组

这里简单的说一下一些需要注意的地方吧
初始化方式同普通数组一样,大括号嵌套,还有如果没有被定义到的值,初始化为0

int (&row)[4] =  ia[1];//把row绑定在ia的第二个4元素的组上

范围遍历多维数组

for (const auto &row : ia)
	for (auto col : row)
		cout << col << endl;

这里注意我们将外层循环的控制变量声明成了引用类型,这是为了避免数组被自动转化为指针
意思就是如果是row,那么row指向第一个元素,应该是元素组,下面的一个可能会被修改为一个预期以外的值

4.表达式

表达式已经很熟悉了哈
就不多说了,找点需要注意的

bool b = ture; //那么-b的值也为true

c++11标准规定商一律向0取整,现在好像很多都支持c++14了,等以后再看吧,先把c++11学明白

成员访问运算符
auto n = s1.siza();
n = (*p).size();
n = p->size(); //等价于(*p).size()

算数运算符的优先级>移位运算符>关系运算符、赋值运算符、条件运算符
sizeof()不是一个成员函数,就是一个函数,返回的值是一个表达式或者类型名字所占的字节数

没了,这一章水的不行,可能实我以前学的比较好哈哈哈
下一章也很水,也不是我水啊,这个真的没什么写的,而且我的加快进度了啊

4.表达式

if
while
do while
for
switch
break
continue
goto

5.函数

这一章就开始有东西了
实参理解为在main函数里的,或者是你想要去处理的那个变量或常量
形参就是一个形式上的东西,声明自己是有这个的,有助于理解函数

return语句的两个作用

1.返回return语句中的值
2.将控制权从被调函数转移回主调函数

局部对象

局部变量
形参和函数体内部定义的都是
自动变量
在函数运行中被调用出现,当函数结束或者终止时被销毁的
局部静态变量
在函数调用以后不会消失,保留被处理过的那个值

size_t count_calls()
{
	static size_t ctr = 0;
	return ++ctr;
}
int main()
{
	for (size_t i = 0; i != 10; ++i)
		cout << count_calls() << endl;
}

如果局部静态变量没有显示的初始值,它将执行值初始化,内置类型的局部静态变量初始化为0。

在头文件中进行函数声明

不写了,今天就先这样,22:51,速度还是有所提升的,突然感觉今天有点类,压缩时间的第三天,感觉还可以,按照我这个进度,后面的不可预知性太大了,继续加油吧

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值