C Array in Stl Vector speichern



  • Hallo liebe Community,

    wie kann man ein C Array in einem Stl Vector speichern?

    Beispielcode: (funktioniert leider nicht)

    //Include
    
    typedef int ARR [10];
    ARR arr = {1,2,3,4,5,6,7,8,9,0};
    vector<ARR> vect;
    
    int main () {
       vect.push(arr);
       for (int i=0;i<10;++i)
          cout << vect[0][i] << endl;
    }
    

    Hoffe ihr könnt mir helfen.

    PS: Also ich will schon ein C Array im Vector speichern und keinen anderen Vectotr!



  • Mach doch einfach eine Schleife.

    for (int i=0;i<10;++i) {
      vect.push_back(arr[i]);
    }
    

    Der vector muss dann natürlich auch vom Typ int sein.



  • Ich möchte mehrere Arrays drin speichern...



  • Arrays sind weder kopier- noch vergleichbar, also nein, geht nicht. Workaround:

    struct ARR
    {
        int var1;
        int var2;
        int var3;
    
        ...
    
        int var10;
    }
    
    std::vector<ARR> myVector;
    


  • Erzähl am besten mal genauer, welchen Hintergrund das Ganze hat, was du vorhast. Vielleicht findet man da ja eine grundsätzlich andere (aber vielleicht bessere) Lösung.



  • Dies ist eher eine, naja, schlechte Lösung, oder wie willst du die Variablen im struct iterieren um auf ihre Werte zuzugreifen.

    Würde es mit

    struct {
       int arr[10];
    }
    

    funktionieren?



  • ProgrammierGeselle schrieb:

    Dies ist eher eine, naja, schlechte Lösung, oder wie willst du die Variablen im struct iterieren um auf ihre Werte zuzugreifen.

    Würde es mit

    struct {
       int arr[10];
    }
    

    funktionieren?

    Ja.



  • @_matze:
    Naja, bräuchte eigentlich einen Stl Container, also die Queue,
    mit der will ich meine BFS Funktion realisieren.
    Die Werte will ich in einem C Array speichern, da ich nur 1 Sekunde Zeit habe,
    um mit meinem Algo das Problem zu lösen und der Zugriff auf C Arrays schneller
    erfolgt als auf Vectors.



  • So habe ein Beispielcode entworfen der funktioniert,

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    // Array in einer Struktur definieren
    struct ARR {
    	int arr[10];
    };
    
    int main () {
    	// Variablen deklarieren
    	ARR cnt;
    	vector<ARR> vect;
    	// C Array in Struktur initialisieren
    	for (int i=0;i<10;++i)
    		cnt.arr[i]=i;
    	// Struktur in Vector einfügen
    	vect.push_back(cnt);
    	// Inhalt von Vector ausgeben
    	for (int i=0;i<vect.size();++i)
    		for (int j=0;j<10;++j)
    			cout << vect[i].arr[j] << (j==9?'\n':' ');
    	// Programm Ende
    	cin.get();
    	return 0;
    }
    


  • Soll das mit mehreren verschieden langen Arrays funktionieren sein, wäre btw. folgendes möglich:

    template <unsigned int length> struct ARR {
        int arr[length];
    }; 
    
    std::vector<ARR<10> > vecarr;
    


  • Der Unterschied zwischen std::vector und Array ist minimal, also von der Performance. Ich bezweifle heftig dass die STL für dein Vorhaben zu langsam ist.



  • ProgrammierGeselle schrieb:

    Die Werte will ich in einem C Array speichern, da ich nur 1 Sekunde Zeit habe,
    um mit meinem Algo das Problem zu lösen und der Zugriff auf C Arrays schneller
    erfolgt als auf Vectors.

    Was den Zugriff betrifft, sind wohl beide ziemlich genau gleich schnel, sofern man allfällige Laufzeitprüfungen deaktiviert und im Release-Modus testet.

    Unbestätigte Vermutungen dieser Art führen oft dazu, dass man eine schlechtere Variante wählt. Wenn du es wirklich genau wissen willst, messe nach. Aber sei dir bewusst, dass es in C++ keinen Grund gibt, weshalb Container langsamer sein müssen als Arrays (ganz speziell beim Wrapper std::tr1::array ).


Log in to reply