char Array an Vector übergeben



  • Wie kann ich ein char Array an einen Vector übergeben?

    So funktioniert es jedenfalls nicht: 😞

    void foo ( vector<char> & var )
    {
    
    }
    
    char s[2] = {'1','2'};
    
    foo ( s ) ;
    

    [C++ Warnung] main.cpp(147): W8030 Temporäre Größe für Parameter 'var' in Aufruf von 'foo(vector<char,allocator<char> > &)' verwendet

    [C++ Fehler] main.cpp(147): E2064 'vector<char,allocator<char> > &' kann nicht mit 'char *' initialisiert werden <-- Heißt das man kann überhaupt kein char Array an einen Vector übergeben kann?

    [C++ Fehler] main.cpp(147): E2342 Keine Übereinstimmung des Typs beim Parameter 'var' ('vector<char,allocator<char> > &' erwartet, 'char *' erhalten)

    Ist das überhaupt möglich was ich hier vorhabe oder MUSS ich einen Vector übergeben? Ich könnte natürlich einfach einen Vector übergeben aber das hier dient nur zur Übung ...



  • char s[2] = {'1','2'};
        vector<char> var( s, s + sizeof(s)/sizeof(*s) );
    


  • DerVector schrieb:

    Wie kann ich ein char Array an einen Vector übergeben?

    Garnicht. Du willst hier auch eher ein char-Array an eine Funktion übergeben, die eine Referenz auf einen vector erwartet.

    1. Du kannst nicht einfach aus einem Array einen vector machen. Du kannst nur den Inhalt des Arrays in den vector kopieren. Ein vector hält zwar intern ein (dynamisches) Array, verwaltet das aber omplett selber.
    2. Muss diene Funktion wirklich eine nichtkonstante Referenz bekommen? Sowas macht nur Sinn, wenn der übergebene vector von der Funktion verändert werden soll.

    DerVector schrieb:

    Ist das überhaupt möglich was ich hier vorhabe oder MUSS ich einen Vector übergeben?

    Es wird nicht so ganz klar, was du wirklich vorhast (= erreichen willst), aber ja, du musst einen vector übergeben.



  • Guten Morgen.

    char arr[3] = {'1', '2', '3'};
    std::vector<char> vec (arr, arr+sizeof(arr)/sizeof(char);
    foo(vec);
    

    gruß
    syntax



  • Danke funktioniert.

    Aber eine Frage hab ich noch zum Code:

    char s[2] = {'1','2'};
        vector<char> var( s, s + sizeof(s)/sizeof(*s) )
    

    Wieso schreibt man im ersten Parameter s?
    Der Erste Parameter gibt doch eigentlich die Vector Größe an.

    Also z.b.:

    vector<char>(4,'A'); // Erstellt ein Vector mit 4 Elementen die mit A initialisiert sind.
    
    sizeof(s)/sizeof(*s);
    

    das versteh ich ja noch aber wofür das s+ ?



  • Du schaust den falschen Konstruktor an:

    template <class InputIterator>
             vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );
    

    sizeof(s) gibt dir die Größe des Arrays.
    sizeof(*s) gibt dir die Größe des ersten Elements des Arrays.
    In einem Array haben alle Elemente denselben Typ.
    D.h. sizeof(s)/sizeof(*s) = Anzahl Elemente im Array.

    --> s, s+2 --> Anfang, Ende



  • DerVector schrieb:

    Wieso schreibt man im ersten Parameter s?
    Der Erste Parameter gibt doch eigentlich die Vector Größe an.

    Nicht unbedingt - gibt mehr als nur den einen Konstruktor. z.B. den mit zwei Iteratoren 😉


Anmelden zum Antworten