📄 习题3.15 .html
字号:
punctuation-trim:none;text-autospace:none'> for
(string::size_type index = 0; index != (*iter).size();</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>
++index)</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> if
(islower((*iter)[index])) </p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> //单词中下标为index的字符为小写字母</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> (*iter)[index]
= toupper((*iter)[index]);</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> cout
<< *iter << " ";</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> ++cnt;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> if (cnt %
8 == 0)//每8个单词为一行输出</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> cout
<< endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> }</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> return 0;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>}</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm'>习题3.18 </p>
</div>
<p class=XT>编写程序来创建有10个元素的vector对象。用迭代器把每个元素值改为当前值的2倍。</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>//创建有10个元素的vector对象,</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>//然后使用迭代器将每个元素值改为当前值的2倍</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>#include <iostream></p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>#include <vector></p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>using namespace std;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>int main()</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>{</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> vector<int> ivec(10, 20);//每个元素的值均为20</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> //将每个元素值改为当前值的2倍</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> for (vector<int>::iterator
iter = ivec.begin(); </p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> iter
!= ivec.end(); ++iter) </p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> *iter =
(*iter)*2;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> return 0;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>}</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm'>习题3.19 </p>
</div>
<p class=XT>验证习题3.18的程序,输出vector的所有元素。</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>//创建有10个元素的vector对象,</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>//然后使用迭代器将每个元素值改为当前值的2倍并输出</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>#include <iostream></p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>#include <vector></p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>using namespace std;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>int main()</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>{</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> vector<int> ivec(10, 20);//每个元素的值均为20</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> //将每个元素值改为当前值的2倍并输出</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> for (vector<int>::iterator
iter = ivec.begin(); </p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> iter
!= ivec.end(); ++iter) {</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> *iter =
(*iter)*2;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> cout
<< *iter << " ";</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> }</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> return 0;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>}</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:6.4pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题3.20 </p>
</div>
<p class=XT>解释一下在上几个习题的程序实现中你用了哪种迭代器,并说明原因。</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal style='text-autospace:none'>上述几个习题的程序实现中使用了类型分别为vector<int>::iterator和vector <string>::iterator的迭代器,通过这些迭代器分别访问元素类型为int和string的vector对象中的元素。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题3.21 </p>
</div>
<p class=XT>何时使用const迭代器?又在何时使用const_iterator?解释两者的区别。</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>const迭代器是迭代器常量,该迭代器本身的值不能修改,即该迭代器在定义时需要初始化,而且初始化之后,不能再指向其他元素。若需要指向固定元素的迭代器,则可以使用const迭代器。</p>
<p class=MsoNormal style='text-autospace:none'>const_iterator是一种迭代器类型,对这种类型的迭代器解引用会得到一个指向const对象的引用,即通过这种迭代器访问到的对象是常量。该对象不能修改,因此,const_iterator类型只能用于读取容器内的元素,不能修改元素的值。若只需遍历容器中的元素而无需修改它们,则可以使用const_iterator。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题3.22 </p>
</div>
<p class=XT>如果采用下面的方法来计算mid会产生什么结果?</p>
<p class=a1 style='margin-right:.5pt'>vector<int>::iterator
mid = (vi.begin() + vi.end())/2;</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>将两个迭代器相加的操作是未定义的,因此用这种方法计算mid会出现编译错误。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题3.23 </p>
</div>
<p class=XT>解释下面每个bitset对象包含的位模式:</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(a)
bitset<64> bitvec(32);</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(b)
bitset<32> bv(1010101);</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(c)
string bstr; cin >> bstr; bitset<8> bv(bstr);</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal style='text-autospace:none'>(a) bitvec有64个二进制位,(位编号从0开始)第5位置为1,其余位置均为0。</p>
<p class=MsoNormal style='text-autospace:none'>(b) bv有32个二进制位,(位编号从0开始)第0、2、4、5、7、8、11、13、14、16、17、18、19位置为1,其余位置均为0。因为十进制数1010101对应的二进制数为000000000000011110110100110110101。</p>
<p class=MsoNormal style='text-autospace:none'>(c) bv有8个二进制位,(位编号从0开始)用读入的字符串的从右至左的8个字符对bv的0~7位进行初始化。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题3.24 </p>
</div>
<p class=XT style='text-align:justify;text-justify:inter-ideograph'>考虑这样的序列1,2,3,5,8,13,21,并初始化一个将该序列数字所对应的位置设置为1的bitset<32>对象。然后换个方法,给定一个空的bitset对象,编写一小段程序把相应的数位设置为1。</p>
<p class=aff4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -