Vectoren in array ablegen?



  • Hallo,

    ich habe Vektoren unterschiedlicher Länge und würde diese gerne in ein Array ablegen, damit ich auf jedes Element eines bestimmten Vektors zugreifen kann.

    z.b. vector 5 element 2

    Wie gehe ich vor?
    Über ein 2D-Array kann ich es nicht machen, da ich dort eine fixe Größe angeben muss, richtig?
    Deswegen vermute ich, dass ich es über Vektoren realisieren muss.



  • du kannst vectoren auch in vectoren ablegen: std::vector<std::vector<int>>, allerdings ist so nicht gewährleistet, dass die inneren vectoren alle gleich groß sind.



  • Danke für deine Antwort.

    Und Vektoren kann man aber nicht nicht Arrays ablegen?
    Weil meine Anzahl der Vektoren ist fix nur die Länge der einzelnen Vektoren ist unterschiedlich.



  • du könntest ein std::array nehmen:

    std::array<std::vector<int>, VECTOR_COUNT>



  • NaHibi schrieb:

    Und Vektoren kann man aber nicht nicht Arrays ablegen?

    Klar kann man das, warum machst du es nicht einfach?

    std::vector<int> v[10];
    


  • Danke, so werde ich es machen.

    Kann man mehrere Werte auch in einer Zeile hinzufügen, oder muss ich das für jeden Wert einzlen machen?

    v[0].push_back(10);
    v[0].push_back(20);



  • Klar kannst du mehrere Elemente auf einmal in den Vector schieben. Die insert-Methode hat ja eine Überladung, die ein Iterator-Range-Paar erwartet. Ref



  • vector<int> testv;
    testv.insert (testv.begin(), 2, 10 );

    Wie ich das verstehe, kann ich nur mehrere Elemente mit dem gleichen Wert hinzufügen.
    Kann ich auch beliebige Werte hinzufügen?
    z.B. 10 20 23

    Wenn ja, wie?



  • std::array<std::vector<float>, 10> arr;
    
    for(auto & vec : arr)
    {
    	float insertions[] = { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
    	vec.insert(std::end(vec), std::begin(insertions), std::end(insertions)); // per Iterator Range Pair
    	vec.insert(std::end(vec), { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f }); // per Initializer_list
    }
    

    (Frage an die anderen: Ist die Syntax mit der lnitializer_list so richtig?)



  • Skym0sh0 schrieb:

    Frage an die anderen: Ist die Syntax mit der lnitializer_list so richtig?

    Ja. Den Zuweisungsoperator kannst noch weglassen.

    Oder, aus der Kategorie "noch mehr Spaß mit Klammern":

    #include <array>
    #include <vector>
    #include <iostream>
    
    int main()
    {
    	std::array< std::vector< int >, 4 > arr
    	{{
    		{  1,  2,  3,  4,  5 },
    		{  6,  7,  8,  9, 10 },
    		{ 11, 12, 13, 14, 15 },
    		{ 16, 17, 18, 19, 20 }
    	}};
    
    	for( auto & vec : arr ) {
    		for( auto & i : vec )
    			std::cout << i << ' ';
    		std::cout.put( '\n' );
    	}
    }
    

Anmelden zum Antworten