2015-02-11 8 views
5

Ich habe zu verwenden Python oder Matlab verwendet, wo ich eine Liste wie schaffen könnte:Wie schnell Arrays in C++ erstellen

min = 5; 
step = 2; 
max = 16; 
Range = min:step:max; 

und Range wären die Liste [5,7,9,11, 13,15].

Gibt es eine äquivalent einfache Möglichkeit, eine Liste wie "Range" in C++ zu generieren? Das Einfachste, was ich mir vorstellen kann, ist die Verwendung einer For-Schleife, aber das ist vergleichsweise ziemlich mühsam.

+0

So setzen, es in einer Funktion. –

+0

Nun, die For-Schleife ist eine gute Idee, wenn Sie mich fragen (wäre mir nie in den Sinn gekommen). –

+0

[On List Comprehension in C++] (http://dev-perspective.blogspot.com/2012/10/on-list-comprehension-in-c.html) – philipxy

Antwort

2

Sie werden feststellen, dass selbst implementieren müssen, so etwas wie dieses:

std::vector<int> createArray(int min, int max, int step) 
{ 
    std::vector<int> array; 
    for(int i = min; i < max; i += step) 
    { 
     array.push_back(i); 
    } 
    return array; 
} 
5

C++ nicht so etwas, entweder in der Sprache oder der Standardbibliothek nicht liefert. Ich würde eine Funktionsschablone zu suchen (grob), wie etwas aus der Standardbibliothek, etwas in dieser Größenordnung schreiben:

namespace stdx { 
    template <class FwdIt, class T> 
    void iota_n(FwdIt b, size_t count, T val = T(), T step = T(1)) { 
     for (; count; --count, ++b, val += step) 
      *b = val; 
    } 
} 

Von dort sind es etwa so aussehen würde:

std::vector<int> numbers; 
stdx::iota_n(std::back_inserter(numbers), 6, 5, 2); 
1

Es gibt keine Dazu gibt es in C++ eine vordefinierte Methode. Der folgende Code kann Ihnen helfen.

Oder Dies wäre vergleichsweise schneller.

void createArrayRange(std::vector<int>& array, int min, int max, int step) 
{ 
    for(int i = min; i < max; i += step) 
    { 
     array.push_back(i); 
    } 
} 

int main() 
{ 
    std::vector<int> array; 
    createArrayRange(array, min, max, step); 

    return 0; 
} 
1

können Sie std::generate für diese.

std::vector<int> createArray(int min, int max, int step) 
{ 
    std::vector<int> array((max-min)/step); 
    int n = min; 
    std::generate(array.begin(), array.end(), 
    [&]() 
    { 
     int res = n; 
     n+=step; 
     return res; 
    }); 
    return array; 
} 
0

keine expliziten Schleifen erforderlich:

vector<int> data(6,2); 
data[0] = 5; 
std::partial_sum(data.begin(),data.end(),data.begin());