C++习题整理(2)
来源:互联网 发布:北大网络教育好考吗 编辑:程序博客网 时间:2024/04/30 12:54
解释string 类型的输入操作符和getline 函数分别如何处理空白字符。
【解答】
string 类型的输入操作符对空白字符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该 空白字符仍留在输入流中)。 getline 函数对空白字符的处理:不忽略行开头的空白字符,读取字符直至遇到 换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在string 对象中)。
习题3.9
下列程序实现什么功能?实现合法吗?如果不合法,说明理由。
string s;
cout << s[0] << endl;
【解答】
该程序段输出string 对象s 所对应字符串的第一个字符。 实现不合法。因为s 是一个空字符串,其长度为0,因此s[0]是无效的。
注意,在一些编译器(如Microsoft Visual C++ .NET 2003)的实现中,该
程序段并不出现编译错误。
习题3.11
下面哪些vector 定义不正确? (a) vector< vector<int> > ivec; (b) vector<string> svec = ivec (c) vector<string> svec(10,"null");
【解答】
(b)不正确。因为svec 定义为保存string 对象的vector 对象,而ivec 是
保存vector <int>对象的vector 对象(即ivec 是vector 的vector),二者
的元素类型不同,所以不能用ivec 来初始化svec。
习题3.12
下列每个vector 对象中元素个数是多少?各元素的值是什么?
(a) vector<int> ivec1;
(b) vector<int> ivec2(10);
(c) vector<int> ivec3(10,42);
(d) vector<string> svec1;
(e) vector<string> svec2(10);
(f) vector<string> svec3(10,"hello");
【解答】
(a) 元素个数为0。
(b) 元素个数为10,各元素的值均为0。 (c) 元素个数为10,各元素的值均为42。 (d) 元素个数为0。
(e) 元素个数为10,各元素的值均为空字符串。 (f) 元素个数为10,各元素的值均为"hello"。
习题3.15
下面程序合法吗?如果不合法,如何更正? vector<int> ivec; ivec[0] = 42;
【解答】
不合法。因为ivec 是空的vector 对象,其中不含任何元素,而下标操作只
能用于获取已存在的元素。
更正:将赋值语句改为语句ivec.push_back(42);。
习题3.16
列出三种定义vector 对象的方法,给定10 个元素,每个元素值为42。指出是
否还有更好的实现方法,并说明为什么。
【解答】
方法一:
vector<int> ivec(10, 42);
方法二:
vector<int> ivec(10); for (ix = 0; ix < 10; ++ix) ivec[ix] = 42;
方法三:
vector<int> ivec(10);
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter) *iter = 42;
方法四:
vector<int> ivec;
for (cnt = 1; cnt <= 10; ++cnt) ivec.push_back(42);
方法五:
vector<int> ivec;
vector<int>::iterator iter = ivec.end(); for (int i = 0; i != 10; ++i) { ivec.insert(iter, 42); iter = ivec.end(); }
各种方法都可达到目的,也许最后两种方法更好一些。它们使用标准库中定义
的容器操作在容器中增添元素,无需在定义vector 对象时指定容器的大小,比 较灵活而且不容易出错。
习题3.21
何时使用const 迭代器?又在何时使用const_iterator?解释两者的区别。
【解答】
const 迭代器是迭代器常量,该迭代器本身的值不能修改,即该迭代器在定义时
需要初始化,而且初始化之后,不能再指向其他元素。若需要指向固定元素的
迭代器,则可以使用const 迭代器。
const_iterator 是一种迭代器类型,对这种类型的迭代器解引用会得到一个指
向const 对象的引用,即通过这种迭代器访问到的对象是常量。该对象不能修
改,因此,const_iterator 类型只能用于读取容器内的元素,不能修改元素的
值。若只需遍历容器中的元素而无需修改它们,则可以使用const_iterator。
习题3.22
如果采用下面的方法来计算mid 会产生什么结果?
vector<int>::iterator mid = (vi.begin() + vi.end())/2;
【解答】
将两个迭代器相加的操作是未定义的,因此用这种方法计算mid 会出现编译错 误。
习题3.23
解释下面每个bitset 对象包含的位模式:
(a) bitset<64> bitvec(32); (b) bitset<32> bv(1010101);
(c) string bstr; cin >> bstr; bitset<8> bv(bstr);
【解答】
(a) bitvec 有64 个二进制位,(位编号从0 开始)第5 位置为1,其余位置均 为0。
(b) bv 有32 个二进制位,(位编号从0 开始)第0、2、4,5、7、8、11、13、
14、16、17、18、19 位置为1,其余位置均为0。因为十进制数1010101 对应的
二进制数为000000000000011110110100110110101。 (c) bv 有8 个二进制位,(位编号从0 开始)用读入的字符串的从右至左的8
个字符对bv 的0~7 位进行初始化。
- C语言习题整理
- C++习题整理(2)
- C++习题整理(2)
- C++ 习题整理(1)
- C++习题整理(3)
- C++ 习题整理(1)
- C++习题整理(3)
- 面试习题整理(一)
- 习题整理
- c++primer第三章习题(2)
- c++primer第九章习题(2)
- c++primer第十章习题(2)
- 数据结构---习题(C++)
- 整理下C++primer plus 第六版第六章习题。
- C语言程序设计整理(2)
- 【ThinkingInC++】20、关于C的习题(2)
- 数据结构习题 (整理中)
- sql整理之习题..
- 精妙的Morris二叉树遍历算法
- 使用PHP导入和导出CSV文件
- hdu1166(线段树)
- 如何解决Eclipse启动时画面一闪而过
- copy uncode Cstring
- C++习题整理(2)
- u-boot链接文件u-boot.lds分析
- <原>关键帧动画CAKeyframeAnimation
- Flex dataGrid 表头添加按钮
- 《UNIX环境高级编程》笔记--行控制函数、终端标识、终端窗口大小
- u-boot.lds文件诠释
- ora-00922
- png打水印保持透明底
- 查看native内存-BusyBox