[C++ Primer CH03]第3章 字符串、向量和数组(笔记)

小结:

string和vector是两种最重要的标准库类型。string对象是一个可变长的字符序列,vector对象是一组同类型对象的容器。

迭代器允许对容器中的对象进行间接访问,对于string对象和vector对象来说,可以通过迭代器访问元素或者在元素间移动。

数组和指向数组元素的指针在一个较低的层次上实现了与标准库类型string和vector类似的功能。一般来说,应该优先选用标准库提供的类型,之后再考虑C++语言内置的低层的替代品数组或指针。


笔记:

最好使用C++版本的C标准库头文件,C语言的头文件形如name.h,C++则将这些文件命名为cname。特别的,在名为cname的头文件中定义的名字从属于命名空间std。


注意检查下标的合法性,下标必须大于的等于0而小于字符串的size()的值。一种简便易行的方法是,总是设下标的类型为string::size_type,因为此类型是无符号数,可以确保下标不会小于0。此时,代码只需保证下标小于size()的值就可以了。


警告,某些编译器可能仍需以老式的声明语句来处理元素为vector的vector对象,如vector<vector<int> >。(两个> >之间有空格)


vector初始化,如果用的是圆括号,可以说提供的值是用来构造(construct)vector对象的。

如果用的是花括号,可以表述成我们想列表初始化(list initialize)该vector对象。


对vector对象来说,直接初始化的方式适用于三种情况:初始值已知且数量较少、初始值是另一个vector对象的副本、所有元素的初始值都一样。


所有标准库容器都可使用迭代器。


C++程序员习惯性地使用!=,其原因和他们更愿意使用迭代器而非下标的原因一样:因为这种编程风格在标准库提供的所有容器上都有效。


如果不清楚元素的确切个数,请使用vector。


内置的下标运算符所用的搜引值不是无符号类型,这一点与vector和string不一样。


尽管C++支持C风格字符串,但在C++程序中最好还是不要使用它们。


要使用范围for语句处理多为数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。


FAQ(Frequently Asked Questions):

Q1:头文件为什么不应包含using声明?

A1:头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。对于某些程序来说,由于不经意间包含了一些名字,反而可能产生始料未及的名字冲突。

Q2:如何防止缓冲区溢出?
A2:因为只能对确知已存在的元素执行下标操作!所以通过下标访问不存在的元素的行为会导致缓冲区溢出。确保下标合法的一种有效手段就是尽可能使用范围for语句。

Q3:编译器发现不了的错误
A3:如果计算所得的指针超出了上述范围,(指针指向数组arr为元素的下一位置),编译器一般发现不了这个错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值