第4章では、vector型というC言語にはない型とその操作方法が出てくる。ここからが、いよいよC++言語の本らしくなる。練習問題3を引用する。
一連のdouble型の値をvectorに読み込み、これらの値を特定のルートに沿った2つの都市間の距離として考える。総距離(すべての距離の合計)を計算して出力する。2つの隣接する都市の間の最短距離と最長距離、および平均距離を割り出して出力する。
私の回答は、下記の通り。
#include "../../std_lib_facilities.h"
int main() {
vector<double> distance;
for (double x; cin >> x;) {
if (x > 0)
distance.push_back(x);
else
break;
}
if (distance.size() > 0) {
double sum, min, max;
sum = distance[0];
min = distance[0];
max = distance[0];
for (int i = 1; i < distance.size(); ++i) {
sum += distance[i];
if (min > distance[i]) min = distance[i];
if (max < distance[i]) max = distance[i];
}
cout << "総距離:" << sum << ",最短:" << min << ",最長:" << max << ",平均:" << sum / distance.size() << "\n";
}
else
cout << "値が入力されていません\n";
return 0;
}
vectorの最初の値で、min、max、sumを初期化して、その後ろの値を、ループで回して比較するという構成にしている。回答例は、http://www.stroustrup.com/Programming/Solutions/Ch4/e4-3.cppだが、このコードは明らかに間違っている。minを0で初期化すると、minは0のままである。
maxはシステムとしての最小値、minはシステムとしての最大値で初期化するのが定石である。が、私は、最初の値で初期化するという私の回答のやり方を好んでいる。
コメント