Как рассчитать центроид вектора векторов с использованием алгоритмов stl (накапливать и for_each) - PullRequest
0 голосов
/ 24 февраля 2019

Я написал программу, которая генерирует 100 точек в n-мерном пространстве и вычисляет центроид (геометрический центр).Это работает хорошо, но мне нужно написать эту часть, не используя цикл for, только используя накопители, for_each и арифметические функторы.

int dimensions = 2; 
int number_of_points = 100;
vector<vector<double>> cloud_A(number_of_points, vector<double>(dimensions, 0));
for_each(cloud_A.begin(), cloud_A.end(), RandomGenerator(5, 10));
vector<double> centroid_A(dimensions, 0);

for (int i = 0; i < dimensions; i++){
    centroid_A[i] = accumulate(cloud_A.begin(), cloud_A.end(), 0.0, Sum(i));
}   
for_each(centroid_A.begin(), centroid_A.end(), Divide(number_of_points));

Я застрял на несколько часов, задаваясь вопросом, возможно ли это, моя ближайшая ставка была бы, если cloud_A.begin()[count] будет работать:

int count = 0;
for_each(centroid_A.begin(), centroid_A.end(), [&](double d){
    for_each(cloud_A.begin()[count], cloud_A.end()[count], [&](double punkt) {
        centroid_A[count]=accumulate(punkt.begin(), punkt.end(), 0.0, plus<double>()) << endl;
        });
        count++;
    });
...