第三章 字符串、向量和数组(重点)
2017-03-19 17:26
211 查看
3. 字符串、向量和数组(重点)
string和vector是两种最重要的标准库类型,前者表示可变长的字符序列,后者存放的是某种给定类型对象的可变长序列。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个整数的数组
待完善…
相关文章推荐
- 第三章字符串,向量,数组
- 菜狗的C++ primer读书笔记:第三章 字符串、向量和数组
- [C++ primer]第三章笔记--字符串、向量和数组
- c++ primer(第五版)学习笔记及习题答案代码版(第三章)字符串、向量和数组
- c++ primer第三章 - 字符串、向量、数组
- C++ Primer 笔记——第三章 字符串、向量和数组
- C++ Primer学习笔记之第三章--字符串,向量和数组
- 2017-4-28 C++笔记 (第三章 字符串、向量和数组)
- 第三章 字符串、向量和数组
- 《C++primer(第五版)》学习之路-第三章:字符串、向量和数组
- 第三章 字符串、向量和数组
- C++ Primer中文版(第五版)--第三章 字符串、向量和数组
- c++ primer概念整理第三章 字符串,向量,数组
- 第三章 字符串,向量和数组
- 《C++ Primer 第五版》学习笔记-第三章-字符串、向量和数组
- 第三章 字符串、向量和数组
- C++学习笔记 | 第三章 字符串、向量和数组 | (1)
- C++ Primer | 第三章 字符串、向量和数组
- 第三章 字符串、向量、数组
- 第三章 字符串、向量和数组