Ottenere matrice da std:vector

Qual è il modo più semplice di ottenere un array di char da un vettore?

Il modo in cui sto facendo è sempre una stringa di inizializzazione utilizzando il vettore di inizio e fine iteratori, e quindi ottenere .c_str() da questa stringa. Ci sono altri metodi efficaci?

InformationsquelleAutor SkypeMeSM | 2010-11-27

 

2 Replies
  1. 68

    Di questo si è parlato nel Scott Meyers’ Efficace STL, che si può fare &vec[0] per ottenere l’indirizzo del primo elemento di un std::vector, e dal momento che la norma obbliga i vettori per avere contigue di memoria, è possibile fare cose come questa.

    //some function
    void doSomething(char *cptr, int n)
    {
    
    }
    
    //in your code
    std::vector<char> chars;
    
    if (!chars.empty())
    {
        doSomething(&chars[0], chars.size());
    }

    edit: Dai commenti (grazie casablanca)

    • essere cauti circa holding dei puntatori a dati, come il puntatore può essere invalidato se il vettore è modificato.
    • +1 ma attenzione che il puntatore potrebbe essere più valido se il vettore è modificata successivamente.
  2. 41
    std::vector<char> chars;
    char* char_arr = chars.data(); //&chars[0]
    • data() non fa parte dello standard STL specifica.
    • Fa parte del nuovo C++0x STL (implementato sia in MVSC e GCC), e dovrebbe essere utilizzata &caratteri[0] se il tuo compilatore supporta.
    • Perché dovrebbe essere preferito? Proprio a causa della leggibilità o fare altre ragioni di esistere?

Lascia un commento