练习3.16
编写一段程序,把练习3.13中vector对象的容量和具体内容输出来。
解答:
使用for配合auto来输出对象。
容量可以用size()函数。
练习3.17
从cin读入一组词并把它们存入一个vector对象,然后设法把所有词都改写为大写形式。输出改变后的结果,每个词占一行。
解答:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
int main(){
string word;
vector<string> wvec;
while (cin >> word){
wvec.push_back(word);
}
for (auto i : wvec){
transform(i.begin(), i.end(), i.begin(), toupper);
cout << i <<endl;
}
}
参考:http://www.cnblogs.com/greenerycn/archive/2009/07/01/1515080.html
练习3.18
下面的程序合法吗?如果不合法,你准备如何修改?
vector<int> ivec;
ivec[0] = 42;
解答:
不合法。
第二句改为: ivec.push_back(42);
练习3.19
如果想定义一个含有10个元素的vector对象,所有元素都是42,请列举出三种不同的方法。哪种方法更好呢?为什么?
解答:
(1) vector<int> ivec(10, 42);
(2) vector<int> ivec{42, 42, 42, 42, 42, 42, 42, 42, 42, 42};
(3) int num[] = {42, 42, 42, 42, 42, 42, 42, 42, 42, 42};
vector<int> ivec(num, num + 10);
个人喜欢第一种方法,简单。
练习3.20
读入一组整数并把它们存入一个vector对象,将没对响铃整数的和输出出来。改写你的程序,这次要求先输出第一个和最后一个元素的和,接着输出第二个和倒数第二个的和,以此类推。
解答:
#include <iostream>
#include <vector>
using namespace std;
int main(){
int num[] = { 1, 3, 4, 43, 4, 354, 5, 3, 2, 4, 4, 5, 3, 2, 5, 53, 5, 43,2 };
vector<int> ivec(num, num + 19);
auto it = ivec.cbegin();
auto rit = ivec.crbegin();
for (; it != (ivec.cbegin() + ivec.size() / 2) && rit != (ivec.crbegin() + ivec.size());
++it, ++rit){
cout << *it + *rit << endl;
}
if (ivec.size() % 2){
cout << ivec.at(ivec.size() / 2) << endl;
}
}