Ha senso iterare un ciclo a distanza usando il riferimento costante qui?

-1

Ho il seguente codice, e mi stavo chiedendo se sto iterando in modo ottimale attraverso il mio ciclo a distanza:

struct data_type
{
      int a;
      int b;
};

int main()
{
    // Assume I have initialized a vector storing data_type objects.
    // The vector is called "vec".

     for (const data_type& temp: vec)
     {
           // Observe temp's attributes (int a and int b).
     }
}

È meglio iterare usando il riferimento costante come ho fatto? O iterando per valore sii migliore (data_type temp: vec). Sto chiedendo sia per scrivere codice più chiaro e codice più efficiente.

Ho sentito dire che è meglio / efficiente passare il valore con i piccoli tipi di dati, come gli inte. La mia struct "data_type" è composta solo da due interi, quindi non sono sicuro che sia meglio usare un riferimento o un valore costante.

Sull'argomento del codice più chiaro, mi sembrano chiari sia il riferimento costante che il passaggio per valore (sebbene forse ci siano opinioni divergenti su questo).

    
posta Inertial Ignorance 13.05.2018 - 22:57
fonte

1 risposta

2

A seconda del vettore, potresti essere in grado di ripetere solo con un const iteratore - se il contenuto o il vettore stesso è definito const (o passato come const a te).

Se hai bisogno solo dell'accesso in lettura al contenuto, usa sempre% iterator const . È leggermente più efficiente e ti protegge dalla modifica accidentale del contenuto tramite le chiamate alle funzioni ecc.

Utilizza sempre un riferimento const T& , che evita qualsiasi copia dei valori nel vettore (ricorda semplicemente const auto& it per tutti i casi). Questo può fare molta differenza se la copia è costosa.

Ovviamente, se vuoi modificare il contenuto, hai bisogno di un iteratore di riferimento non const.

    
risposta data 14.05.2018 - 04:53
fonte

Leggi altre domande sui tag