想用c++做python里计算数列平均值,和正数在绝对值的比例

想用c++做python里计算数列平均值,和正数在绝对值的比例

img

#include <algorithm>
#include <iostream>
#include <iterator>
#include <numeric>
#include <vector>

int main() {
  std::vector<int> lst = {-9, 18, 48, 12, 1,  -9,  -22, -6, 8,  -18,
                          3,  14, -2, 23, 14, -15, 9,   22, -18};

  // 区分正数
  std::vector<int> lst1;
  std::copy_if(lst.begin(), lst.end(), std::back_inserter(lst1),
               [](auto x) { return x > 0; });
  std::cout << "正数个数: " << lst1.size() << '\n';
  std::copy(lst1.begin(), lst1.end(),
            std::ostream_iterator<int>(std::cout, " "));
  std::cout << '\n';
  double s1 = std::accumulate(lst1.begin(), lst1.end(), 0);
  std::cout << "平均值: " << s1 / lst1.size() << '\n';

  // 区分负数
  std::vector<int> lst2;
  std::copy_if(lst.begin(), lst.end(), std::back_inserter(lst2),
               [](auto x) { return x < 0; });
  std::cout << "负数数个数: " << lst1.size() << '\n';
  std::copy(lst2.begin(), lst2.end(),
            std::ostream_iterator<int>(std::cout, " "));
  std::cout << '\n';
  double s2 = std::accumulate(lst2.begin(), lst2.end(), 0);
  std::cout << "平均值: " << s2 / lst1.size() << '\n';

  // 计算正数在数列绝对值中的比例
  std::cout << "比例: " << s1 / (s1 - s2) << '\n';
  return 0;
}
$ g++ -Wall main.cpp
$ ./a.out
正数个数: 11
18 48 12 1 8 3 14 23 14 9 22 
平均值: 15.6364
负数数个数: 11
-9 -9 -22 -6 -18 -2 -15 -18 
平均值: -9
比例: 0.634686

如果加一个数列,只求平均值,怎么一起计算

img