第三章 字符串、向量和数组

  1. 头文件不应包含using声明。
  2. C++标准一方面对库类型所提供的操作做了详细规定,另一方面也对库的实现者做出了一些性能上的需求。因此,标准库类型对于一般应用场合来说有足够的效率。
  3. 如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如过不使用等号,则执行的是直接初始化(direct initialization)。
  4. getline函数从给定的输入流中读入内容,知道遇到换行符为止(注意换行符也读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。
  5. string::size()函数返回的是一个string::size_type类型的值。
  6. "Hello"<"Hello World"。
  7. 由于某些历史原因,也为了与C兼容,所以C++语言中的字符串字面值并不是标准库类型string的对象。切记,字符串字面值与string是不同的类型。
  8. 确保下标合法的一种有效手段就是尽可能使用范围for语句。
  9. 如果容器为空,begin和end返回的是同一个迭代器,都是尾后迭代器。
  10. 迭代器这个名词有三种不同的含义:可能是迭代器概念本身,也可能是指容器定义的迭代器类型,还可能是指某个迭代器对象。
  11. 虽然vector对象可以动态地增长,但是也会有一些副作用。已知的一个限制是不能在范围for循环中向vector对象添加元素。另外一个限制是任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。
  12. 和vector一样,数组的元素应为对象,因此不存在引用的数组。
  13. 要想防止数组下标越界,除了小心谨慎注意细节以及对代码进行彻底的测试之外,没有其他好办法。
  14. 当使用数组作为一个auto变量的初始值时,推断得到的类型是指针而非数组。当使用decltype关键字时转换不会发生,返回的类型是数组。
  15. 标准库类型限定使用的下标必须是无符号类型,而内置的下标运算无此要求。
    int a[] = {0,2,4,6,8};
    int *p = &a[2];    // p指向索引为2的元素
    int k = p[-2];     // p[-2]是a[0]表示的那个元素
    
  16. 尽管C++支持C风格字符串,但在C++程序中最好还是不要使用它们。这是因为C风格字符串不仅使用起来不太方便,而且极易引发程序漏洞,是诸多问题的根本原因。对大多数应用来说,使用标准库string要比使用C风格字符串更安全、更高效。
  17. 如果执行完string::c_str()函数后程序想一直都能使用其返回的数组,最好将该数组重新拷贝一份。
  18. 现代的C++程序应尽量使用vector和迭代器,避免使用内置数组和指针;应该尽量使用string,避免使用C风格的基于数组的字符串。
  19. 要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型,否则会被系统自动转换为指针类型。
  20. C风格字符串(C-style string),以空字符结束的字符数组。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值