Skip to main content

ex22.cpp


// Solution to Exercise 22
// (NDE, 2013-01-19)
#include <vector>
#include <iostream>
#include <fstream>
#include <numeric>
#include <cmath>
using namespace std;
void read_data(ifstream& infile, vector<double>& data)
{
  double value;
  while (infile >> value) {
    data.push_back(value);
  }
}
double mean(const vector<double>& data)
{
  double sum = accumulate(data.begin(), data.end(), 0.0);
  return sum / data.size();
}
double stdev(const vector<double>& data)
{
  double m = mean(data);
  double sum = 0.0;
  vector<double>::const_iterator i = data.begin();
  for (; i != data.end(); ++i) {
    double dev = *i - m;
    sum += dev*dev;
  }
  return sqrt(sum / data.size());
}
int main(int argc, char* argv[])
{
  // Check command line
  if (argc != 2) {
    cerr << "Error: filename required" << endl;
    return 1;
  }
  // Open file
  ifstream infile(argv[1]);
  if (not infile.is_open()) {
    cerr << "Error: cannot open file" << endl;
    return 1;
  }
  // Populate vector with data
  vector<double> data;
  read_data(infile, data);
  int size = data.size();
  cout << "Vector has " << size << " elements" << endl;
  // Compute mean
  cout << "Mean = " << mean(data) << endl;
  // Compute standard deviation
  cout << "Std dev = " << stdev(data) << endl;
  return 0;
}