Функция библиотеки STL для разбиения интервала - PullRequest
1 голос
/ 25 августа 2010

Я бы хотел разделить интервал, такой как [-1.0, 1.0], на дискретный набор точек, расположенных на равном расстоянии, с указанным расстоянием или размером шага между каждой точкой. Например, если размер шага равен 0,1, моя функция вернет массив:

-1.0, -0.9, -0.8,...., 0.9, 1.0. 

Теперь способ использования векторного контейнера следующий:

vector<double> Range;      

double Step = 0.1;

Range.push_back(-1.0); 

for(unsigned int i=0; i<int(2.0/Step); i++)
{
    Range.push_back(Range.back() + Step); 
}

Можно ли использовать библиотечную функцию STL?

Ответы [ 2 ]

0 голосов
/ 25 августа 2010

Вот пример использования функции генерации.

#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
#include <math.h>

using namespace std;

// The step interval
const double step = 0.1;

struct stepInterval {

   double current;

   stepInterval() :
      current (-1.0 - step) {
   }

   double operator()() {
      current += step;
      return current;
   }

} StepInterval;



int main () {
   // Calculate the vector size. Add 1 for zero.
   const int vectorSize = ceil(2.0 / step) + 1;

   // Create the vector
   vector<double> myvector (vectorSize);

   generate (myvector.begin(), myvector.end(), StepInterval);

   cout << "\nmyvector contains:";

   for (vector<double>::iterator it=myvector.begin();
        it!=myvector.end();
        ++it)  {
      cout << " " << *it;
   }
   cout << endl;

   return 0;
}
0 голосов
/ 25 августа 2010

Проверьте функцию generate.Вам все еще нужно будет написать функцию / функтор для приращения, но это относительно просто и может использоваться постоянно ...

...