C++Primer第三章知识总结

C++Primer第三章知识总结

1、string和数组的比较
(1)string和数组的定义和类型
①string类型是可变长的字符序列,是C++标准库类型(是由C++标准库提供的一种程序员定义的类型)。
②数组是相同类型对象的容器,是内置的复合类型(内置类型:是语言本身定义的类型),不是程序员定义的类类型。
(2)string和数组对begin和end函数的使用
①string类里有很多成员函数,其中包括begin和end函数;string对象可以通过点运算符来使用这些函数,假设一个string对象为str1,以下再出现不同的string对象可设为str2,str3,以此类推。形如:auto it1=str.begin();auto it2=str.end();函数的返回值是是对应位置的迭代器。
②而数组不是类类型,内置类型类内并没有定义成员函数。所以,数组使用begin和end函数的方法是将数组作为函数的形参来调用函数。假设定义了数组a1,不同的数组定义为a2,a3,根据情况赋予相应的类型,以此类推。形如:int *beg=begin(a1);int *last=end(a1);函数的返回值是对应位置的指针。
(3)使用字符串字面值初始化或赋值
①当string对象使用字符串字面值初始化或赋值时,空字符’\0’没有拷贝到string对象中。
②当数组使用字符串字面值初始化或赋值时,空字符’\0’必须拷贝到数组中。
(4)string对象和数组的索引类型
①string对象的索引类型是string::size_type;是无符号类型。标准库类型的索引类型都是无符号类型。如vector对象的索引类型是vector< int >::size_type,也是无符号类型。
②数组对象的索引类型是size_t类型,是符号类型,有负值存在。

2、string和C风格字符串的比较
(1)string和C风格字符串的定义
①string类型是可变长的字符序列,用字符串字面值初始化或赋值时,不保存空字符。
②C风格字符串是以空字符结束的字符数组。

(2)string字符串和C风格字符串的比较操作
①string字符串的比较操作直接使用比较运算符,如==,!=,>,<等符号进行比较。
②C风格字符串是利用C语言标准库String函数strcmp(p1,p2),来比较两个C风格字符串。

(3)返回string字符串和C风格字符串的长度
①string字符串使用成员函数size来返回字符串的长度,形如:str1.size();
②C风格字符串则使用C语言标准库String函数strlen(p1)来返回字符串的长度,形如strlen(a1);

(4)字符串的初始化赋值和连接
①允许string对象初始化或赋值给另一个string对象,形如:string str1=str2;或str1=str2;
两个string字符串的连接使用相加运算符即可实现,形如:str1+=str2;
②不允许数组初始化或赋值给另一个数组;
两个数组连接在一起的操作,必须要使用strcpy(p1,p2)和strcat(p1,p2)函数来完成。形如:
足够长的空字符a3,将a1和a2连接后赋值到a3中;
strcpy(a3,a1);strcat(a3,a2)。

(5)
①任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代,如string对象的加法运算和复合赋值运算。
②反之则不成立,如不能对string对象初始化指向字符的指针。(是string对象只能使用迭代器,不能使用指针,还是指针只能指向数组类型)。

3、string和vector的比较
(1)string和vector的定义
①string类型是可变长的字符序列。
②vector是相同类型的对象的集合,vector是类模板,由vector生成的类型必须包含vector元素的类型。形如:vector< int > //保存int型元素的vector类型

(2)string和vector初始化和赋值。
两者都允许将一个对象初始化和赋值给另外一个对象。
①string对象使用直接初始化(圆括号)和拷贝初始化(=号)。
②vector对象使用列表初始化或圆括号初始化。形如:vector< int > vec{1,2,3>;或
vector< int > vec1(10,1);。

(3)string和vector的写操作
①string的写操作,可以调用getline函数来写入string对象的全部值(包括空白),语法形式:
getline(cin,str);
②vector的写操作,向vector对象添加元素。语法形式:先创建一个空vector,再使用push_back向其中添加元素。vec.push_back(i); //将i压到容器vec的尾元素。

(4)string和vector的其他操作
①两个对象的比较,相加,调用empty和size函数的语法形式都是相同的。
②string对象和vector对象的索引都是无符号类型,string对象的索引是string::type_size类型,而vector对象的索引是vector< int >::type_size类型。

4、vector和数组的比较
(1)vector和数组的定义
①相同点:vector和数组都是存储相同类型的对象的容器。
②不同点:vector对象可以添加元素,而数组对象在初始化时已经确定好了元素的数量,不可以再添加元素。

(2)对vector元素和数组元素的访问
①相同点:都允许使用迭代器对vector和数组元素的访问,只不过数组的迭代器是指针。
②不同点:不能用指针来访问vector对象的元素。
建议:尽量使用vector和迭代器来编程序,因为它们的灵活性更高。而数组和指针的稳定性高,编译的速度更快。

(3)vector对象和数组对象的索引类型
①vector对象的索引类型是vector< int >::type_size,是无符号类型。
②数组对象的索引类型是size_t,是带符号类型。

迭代器和指针的区别
(1)迭代器和指针的定义和类型
①迭代器是遍历序列的一种数据类型,类型是iterator或const iterator。
②指针也是一种迭代器,也能遍历序列。指针是一种复合类型,可以是指向任何一种基本数据类型的指针。

(2)访问的对象
①迭代器可以访问所有标准库容器中的元素,如string和vector类型。
②指针可以访问一些指定容器,比如数组。

(3)迭代器和指针的运算
相同点:迭代器和指针的运算几乎是相同的。比如:(iter代表迭代器或指针)
①*iter
②++iter
③–iter
④iter+n;iter-n;
不同点:
①使用begin和end函数时,迭代器返回的是对应元素的迭代器,指针返回的是对应元素的迭代器。
②两个迭代器相减时,得到是距离,类型是difference_type。而两个指针相减时,得到的距离的类型是ptrdiff_t。

猜你喜欢

转载自blog.csdn.net/qq_47466050/article/details/106645265
今日推荐