2016-12-08 11 views
0

Ich möchte einen Zeilenvektor in C++ mit ganzzahligen Elementen von und einschließlich 0 bis N (eine Integer-Variable, die ich in meinem C++ - Programm zuweisen) erstellen. Ich habe den Armadillo C++ Bibliothek gesehen und versuchte, seine span Funktion, aber es nicht schafft einen Vektor (eher erzeugt ein Objekt mit Typ arma::span) so schreiben:Wie erstellt man einen Zeilenvektor mit Elementen von 0 bis einschließlich N in C++?

vec n = span(0,N); 

nicht den gewünschten Vektor erstellen. Wenn es hilft (wie, wenn meine Erklärung, was ich will, ist unklar) Ich weiß, dass in MATLAB dies den Vektor erzeugt Ich möchte:

n=0:N; 

Ich weiß nicht wirklich egal, welche Bibliothek (falls vorhanden) verwendet wird, sofern die Bibliothek ist auf den meisten großen Linux-Distributionen verfügbar (wie meine jetzige, Fedora 25).

+2

Können Sie ein Beispiel für Ihre erforderliche Ausgabe angeben. Ist es nur ein Vektor wie {0,1,2,3,4,5,6,7,8,9}, wo N = 9? Wenn ja, vielleicht ['std :: iota'] (http://en.cppreference.com/w/cpp/algorithm/iota)? –

+0

Ja, nur ein Vektor nichts besonderes, genau wie du in deinem Beispiel beschrieben hast. – BH2017

+0

OK, gut, wenn Sie mir zeigen können, wie ich 'std :: iota' verwenden kann, um einen Vektor' n' mit Elementen von (und einschließlich) '0' zu' N' zu erstellen, akzeptiere ich Ihre Antwort. – BH2017

Antwort

2

Sie std::iota wie so nutzen könnten.

#include <numeric> 
#include <vector> 
#include <iostream> 

int main() 
{ 
    int N = 9; 
    std::vector<int> n(N + 1); 
    std::iota(begin(n), end(n), 0); 

    for(auto i: n) 
    { 
     std::cout << i << '\n'; 
    } 
} 

Theres wahrscheinlich auch eine coole Art, es bei der Kompilierung zu tun std::integer_sequence und einige metaprogramming verwenden.

+0

Ich bin etwas verwirrt durch diese Antwort, weil Sie meine Vektorvariable 'n' mit' x geschaltet zu haben schien '. Hast du? – BH2017

+0

ja. Ich habe den Namen der Variablen nicht als wichtig angesehen. Ich kann es in der Antwort n kein Problem nennen. Obwohl das sehr ähnlich zu "N" ist. –

+1

Obwohl TBH weder 'n' noch' x' sind sehr beschreibende Namen. –

1

können Sie die Funktion std::iota wie folgt verwenden:

std::vector<int> v(n + 1); 
std::iota(v.begin(), v.end(), 0); 

Oder Sie könnten das einpacken in eine Funktion wie folgt aus:

inline std::vector<int> zero_to_n_vector(std::size_t n) 
{ 
    std::vector<int> v(n + 1); 
    std::iota(v.begin(), v.end(), 0); 
    return v; 
} 

auto v = zero_to_n_vector(20); 
Verwandte Themen