Проблема с ведущими нулями в массиве векторов двойников - PullRequest
1 голос
/ 30 августа 2010

Я пытаюсь вычислить стандартное отклонение вектора чисел двойников (называемого А).Теперь у меня есть функция с именем StDev, которая будет делать это.Однако первые несколько элементов вектора A равны нулю, и мне нужно удалить их.Для этого я создаю подмассив, а затем передаю его в мою функцию StDev следующим образом:

 std::vector<double> Array(find_if(Data.begin(), Data.end(), std::bind1st (std::not_equal_to<double>(), 0.0)), Data.end());     

 double standard_deviation = StDev(Array); 

Есть ли способ сделать это без необходимости создания вектора «Массив», который используется только один раз,Могу ли я как-то передать необходимый под-массив напрямую?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 30 августа 2010

Если вы можете изменить свою функцию StDev, чтобы взять диапазон итератора вместо целого контейнера, вы можете сделать это довольно легко:

template <typename ForwardIt>
std::iterator_traits<ForwardIt>::value_type 
StDev(ForwardIt first, ForwardIt last) { /* ... */ }

// called as:
double stdev = StDev(Data.begin(), Data.end());

// or:
double stdev = StDev(
    find_if(Data.begin(), Data.end(), 
            std::bind1st(std::not_equal_to<double>(), 0.0)), 
    Data.end()); 
1 голос
/ 30 августа 2010

Вы можете изменить функцию StDev, чтобы она пропускала столько нулей, сколько элементов в начале массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...