C++Primer读书笔记第三章(下)

进入了第三章的下半部分,感觉因为使用的少,所以对这些东西没有什么感觉,也就大概的浏览了一下。
第三章首先讲的是迭代器。就是感觉是数据结构的开始和结尾的一种反馈。但是书中强调了迭代器和指针不是一样的东西,所以对此也比较疑惑,先记录下来。使用的方法是 auto i = s.begin(); i < s.end(); i++ 这种方式。书中写到虽然迭代器和指针不一样,但是仍然可以使用(*i)这种操作。或者i++的这种操作,所以迭代器的本质应该还是指针的。不过使用auto只是一种省事的方式,还可以的的 vector::iterator it,或者string it2。
后面就是讲的是数组和多维数组,但是我感觉没有讲到精髓上。都是简单的赋值等操作。或许我读的太草率,也或者是在更往后吧,拭目以待。但是这里有一个很好的知识点是:理解复杂的数组声明。例如int (*Parray)[10] = &arr; Parray指向一个含有10个整数的数组。 int (&arrRef)[10] = arr; arrRef引用一个含有10个整数的数组。这里使用的是从内向外的理解方式(*Parry)是一个指针,指向了含有10个数据的arr。这里的10个数据都是int的类型。后面讲的就是对于数组里面的数据的使用。其中一个很重要的知识点就是关于数组的越界。如果单纯的使用下标就会发现很难去解决越界的问题(当然使用vector貌似是不错,但是好像效率太低)。越界这种问题真的是很可怕的,编译器编译不出来,问题很难去复现。最可怕的就是在memcpy的时候经常出错。在平时的工作中,就出现过本来已经把值确认了一遍,但是某个unsigned long类型的值很大,例如(2147483647 * 2) -1的值,然后这个值随便加上一个数就是一个很小的值。很容易骗过检验条件,然后拷贝的时候就会出现问题。所以无论如何,在memcpy之前一定要把值单个判断一遍,从而防止拷贝出错。后面讲的就是指针和数组,这两个本来就是不分家的东西。使用数组的时候,编译器会把它变成指针。auto、迭代器其实都用的是指针。书中给介绍了一种利用指针的判断方式:即把一个值指向数组的最后一位的下一位,只要比这个小,就可以继续执行循环。但是感觉这个很有问题,万一下一个内存被锁了,或者是什么重要的内存,这样不就会出问题吗?所以在这里留下一个疑问。
最后就是一些与C的接口。想string、vector都是C++的产物,c想转化数据就要用写好的函数例如s.c_str()等。所以要注意这些的返回值。返回值是const char*,但是说string内不是const char*是不准确的。所以就这些吧。后面的多维数组感觉不是很舒服讲的。所以后面的以后再谈。^-^

发布了16 篇原创文章 · 获赞 2 · 访问量 2386

猜你喜欢

转载自blog.csdn.net/u011553313/article/details/53890636
今日推荐