第三章 字符串、向量和数组(重点)

3. 字符串、向量和数组(重点)

  • stringvector是两种最重要的标准库类型,前者表示可变长的字符序列,后者存放的是某种给定类型对象的可变长序列。

3.1 命名空间的using声明

  • 作用域操作符(::):编译器应从操作符左侧名字所示的作用域中寻找右侧那个名字。

  • 每个名字都需要独立的using声明。

  • 头文件不应包含using声明。

3.2 标准库类型 string

  • 在执行读取操作时,string 对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止。

  • getline 函数的参数是一个输入流和一个string 对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然后把所读的内容存入到那个string 对象中去(注意不存换行符)。getline 只要一遇到换行符就结束读取操作并返回结果,哪怕输入的一开始就是换行符也是如此。

  • size 函数返回的是一个 string::size_type 类型的值。

  • 切记,字符串字面值与 string 是不同的类型。当把 string 对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是 string 。

  • 建议:使用C++版本的C标准库头文件,如cctype,cname等。

  • 使用基于范围的 for 语句,如 for (auto c : str) cout << c << endl;

  • string 对象的下标必须大于等于 0 而小于 s.size()。不管什么时候只要对 string 对象使用了下标,都要确认在那个位置上确实有值。

  • 无论何时用到字符串的下标,都应该注意检查其合法性。

  • 使用 C++11 新特性时,编译命令为添加参数 -std=c++11

3.3 标准库类型 vector

  • vector是模板而非类型,模板名字后面跟一对尖括号,在括号内放上信息。

  • vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能用于添加元素。

3.4 迭代器介绍

  • 所有标准库容器都可以使用迭代器,但是其中只有少数几种才同时支持下标运算符。有效的迭代器或者指向某个元素,或者指向容器中尾元素的下一个位置,其他所有情况属于无效。

  • 某些对vector对象的操作会使迭代器失效:已知的一个限制是不能在范围for循环中向vector对象添加元素。另外一个限制是任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。

3.5 数组

  • 与vector相似的地方是,数组也是存放类型相同的对象的容器,这些对象本身没有名字,需要通过其所在位置访问。与vector不同的地方是,数组的大小确定不变,不能随意向数组中增加元素。维度大于等于0。

  • char a[]=”C++”; //自动添加表示字符串结束的空字符

  • 要想防止数组下标越界,除了小心谨慎注意细节以及对代码进行彻底的测试之外,没有其他好办法。

  • 在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针。

  • int *e = &arr[10]; //指向arr尾元素的下一个位置的指针。特别注意,尾后指针不能执行解引用和递增操作。

  • 标准库类型限定使用的下标必须是无符号类型,而内置的下标运算符所用的索引值不是无符号类型。

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

  • 以空字符结束的意思是在字符串最后一个字符后面跟着一个空字符(‘\0’)。strlen函数将沿内存位置不断向前寻找,直到遇到空字符才停下来。

  • 不能用string对象直接初始化指向字符的指针,相反的,允许使用数组来初始化vector对象。

  • 现代的C++程序应当尽量使用vector和迭代器,避免使用内置数组和指针;应该尽量使用string,避免使用C风格的基于数组的字符串。

3.6 多维数组

  • 严格来说,C++语言中没有多维数组,通常所说的多维数组其实是数组的数组。一个维度表示数组本身大小,另外一个维度表示其元素大小。

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

  • int *ip [4]; //整型指针的数组
    int (*ip) [4]; //指向含有4个整数的数组

待完善…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值