2010-08-25 10 views
1

Je voudrais partitionner un intervalle tel que [-1.0, 1.0] en un ensemble discret de points équidistants avec une distance ou une taille de pas spécifiée entre chaque point. Par exemple, si l'étape de taille est de 0,1 ma fonction ne retourne un tableau:Fonction de bibliothèque STL pour partitionner un intervalle

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

maintenant une façon de faire en utilisant un conteneur de vecteur est un suit:

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); 
} 

Y at-il une fonction de bibliothèque STL Je pourrais utiliser?

Répondre

0

Vérifiez la fonction generate. Vous aurez toujours besoin d'écrire une fonction/foncteur pour l'incrémenter, mais cela est relativement simple et peut être réutilisé tout le temps ...

0

Voici un exemple utilisant la fonction generate.

#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; 
} 
Questions connexes