📄 习题3.15 .html
字号:
(vector<string>::size_type ix = 0; ix != svec.size(); ++ix) {</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> for
(string::size_type index = 0; index != svec[ix].size(); ++index)</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> if
(islower(svec[ix][index])) </p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> //单词中下标为index的字符为小写字母</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> svec[ix][index]
= toupper(svec[ix][index]);</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> cout
<< svec[ix] << " ";</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> if ((ix +
1) % 8 == 0)//每8个单词为一行输出</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> cout
<< endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> }</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> return 0;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
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.15 </p>
</div>
<p class=XT>下面程序合法吗?如果不合法,如何更正?</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>vector<int> ivec;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>ivec[0] = 42;</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>不合法。因为ivec是空的vector对象,其中不含任何元素,而下标操作只能用于获取已存在的元素。</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>更正:将赋值语句改为语句ivec.push_back(42);。</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:5.6pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题3.16 </p>
</div>
<p class=XT>列出三种定义vector对象的方法,给定10个元素,每个元素值为42。指出是否还有更好的实现方法,并说明为什么。</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal>方法一:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>vector<int> ivec(10, 42);</p>
<p class=MsoNormal style='margin-top:4.8pt'>方法二:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>vector<int> ivec(10);</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>for (ix = 0; ix < 10; ++ix)</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> ivec[ix] = 42;</p>
<p class=MsoNormal style='margin-top:4.8pt'>方法三:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>vector<int> ivec(10);</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>for (vector<int>::iterator iter =
ivec.begin(); </p>
<p class=MsoNormal align=left style='text-align:left;text-indent:150.5pt;
line-height:9.0pt;punctuation-trim:none;text-autospace:none'>iter != ivec.end(); ++iter)</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> *iter = 42;</p>
<p class=MsoNormal style='margin-top:4.8pt'>方法四:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>vector<int> ivec;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>for (cnt = 1; cnt <= 10; ++cnt)</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> ivec.push_back(42);</p>
<p class=MsoNormal style='margin-top:4.8pt'>方法五:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>vector<int> ivec;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>vector<int>::iterator iter = ivec.end();</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>for (int i = 0; i != 10; ++i) {</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> ivec.insert(iter, 42);</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> iter = ivec.end();</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>}</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>各种方法都可达到目的,也许最后两种方法更好一些。它们使用标准库中定义的容器操作在容器中增添元素,无需在定义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'>习题3.17 </p>
</div>
<p class=XT>重做3.3.2节的习题,用迭代器而不是下标操作来访问vector中的元素。</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>重做习题3.13如下:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>//读一组整数到vector对象,计算并输出每对相邻元素的和</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'>//使用迭代器访问vector中的元素</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;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> int ival;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> //读入数据到vector对象</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> cout << "Enter numbers(Ctrl+Z
to end):" << endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> while (cin>>ival)</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> ivec.push_back(ival);</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'> if (ivec.size() == 0) {</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> cout
<< "No element?!" << endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> return
-1;</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'> cout << "Sum of each
pair of adjacent elements in the vector:" </p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> <<
endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> vector<int>::size_type cnt
= 0;</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()-1; </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 + *(iter+1) << "\t";</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
% 6 == 0) //每行输出6个和</p>
<p class=MsoNormal align=left style='text-align:left;line-height:8.8pt;
punctuation-trim:none;text-autospace:none'> cout
<< endl;</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -