C++ Primer 第3章 标准库类型习题+答案
第3章 标准库类型习题
习题3.1 有适当的Using声明,而不用std::前缀,访问标准库中名字的方法,重新编写2.3节的程序,计算一给定数的给定次幂的结果。
代码如下:
习题3.2 什么是默认构造函数?
答:调用构造函数时不必给出实参的构造函数,称为默认构造函数(default constructor),当程序没有定义构造函数,系统会自动调用默认构造函数,一个系统提供的默认构造函数,它的函数体是空的,不起初始化作用。
习题3.3 列举出三种初始化String对象的方法。
答:1.String s1;-默认构造函数,s1为空串。
2.String s2(s1);将s2初始化为s1的一个副本。
3.string s3("valut"); 将s3初始化为一个字符串字面值副本。
习题3.4 s和s2的值分别是什么?
string s;
int mian(){
string s2;
}
答:s和s2的均为空字符串。
习题3.5 编写程序实现从标准输入每次读入一行文本。然后改写程序,每次读人一个单词。
代码如下:
习题3.6 解释string类型的输入操作符和getline函数分别如何处理空白字符。
答:string类型的输入操作符对空白字符的处理:读取并忽略开头所有的空白字符,直到再次遇到空白字符,读取终止。
getline函数对空白字符的处理:不忽略行开头的换行符,读取字符知道遇到换行符,读取终止并丢弃换行符。
习题3.7 编写一个程序读入两个string对象,测试它们是否相等。若不相等指出哪个大。接着改写程序测试它们的长度是否相等,若不相等指出哪个较长。
代码如下:
习题3.8 编一个程序,从标准输入读取多个string对象,把它们连接起来存放到一个更大的string对象中。并输出连接后的string对象。
代码如下:
习题3.9 下列程序实现什么功能?实现合法吗?如果不合法,说明理由。
string s;
cout<<s[0]<<endl;
答:不合法。s是一个空字符串,其长度为0,因此s[0]是无效的。
习题3.10 编一个程序,从string对象中去掉标点符号。要求输入到程序的字符串必须含有标点符号,输出结果则是去掉标点符号的string对象。
习题3.13 读一组整数到vector对象,计算并输出每对相邻元素的和如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。然后修改程序:头尾元素两两配对,计算每对元素的和,并输出。
代码如下:
习题3.14
读入一段文本到vector对象,每个单词储存为vector中的一个元素。把vector对象中每个单词转化为大写字母。输出vector对象中转化后的元素,每八个单词为一行输出。
习题 3.15 下面程序合法吗?如果不合法,如何更正?
vecter<int> ivec;
ivec[0]=42;
解:不合法,因为ivec是空的vector对象,其中不含任何元素,而下标操作只能用于获取已存在的元素。更正:将赋值语句改为语句ivec.push_back(42).
习题 3.16 列出三种定义vector对象的方法,给定10个元素,每个元素值为42。指出是否还有更好的实现方法,并说明为什么。
方法1:vector<int> ivec(10,42);
方法2:vector<int> ivec(10);
for (ix=0;ix<10;++ix)
ivec[ix]=42;
方法3:vector<int>ivec(10);
for (vector<int>:: iteratoriter=iver.begin();iter!=ivec.end();++iter)
*iter=42;
方法4:vecctor<int> ivec;
for(cnt =1;cnt<=10;++cnt)
ivec.push_back(42);
方法5:vector<int> ivec;
vector<int>::iterator iter=ivec.end();
for(int i=0;i!=10;++i)
{
ivec.insert(iter,42);
iter=ivec.end();
}
习题 3.17 重做3.2节的习题 用迭代器来访问vector中的元素。
代码如下:
习题 3.18~3.19 编写程序来创建有10个元素的vector对象。用迭代器把每个元素值改为当前值的2倍,输出vector的所有元素。
代码如下:
习题 3.20 解释一下在上几个习题的程序实现中你用了哪种迭代器,并说明原因。
解:用了vector<int>::iterator和vector<string>::iterator的迭代器,通过这些迭代器的访问的元素类型,分别为int和string的vector对象元素。
习题 3.21 何时使用const迭代器的?又在何时使用const_iterator?解析两者的区别。
解:const迭代器是迭代器常量,该迭代器的值本身不能修改,即该迭代器在定义时需要初始化,而且初始化之后,不能使它指向任何其他元素。若需要指定固定元素的迭代器,可以使用const迭代器。
const_iterator是一种迭代器类型,对这种迭代器类型进行解引用,则可以得到一个指向const对象的引用。即通过这种迭代器访问到的对象是常量,该对象不能修改,因此,const_iterator迭代器只能读取容器内的元素,不能修改元素的值。若只需遍历容器中的元素无需修改它们,则可以使用const_iterator迭代器。
posted on 2011-09-25 16:43 spring学习笔记 阅读(201) 评论(0) 编辑 收藏 举报