Quali vantaggi ci sono nell'accedere agli elementi vettoriali usando un iteratore o un indice?Qual è la differenza tra gli elementi vettoriali di accesing che utilizzano un iteratore o un indice?
risposta
Perché gli iteratori sono migliori degli indici?
- Nei casi in cui indice non è disponibile (come con std :: list, per esempio).
- Nel caso in cui venga chiamata una funzione generica che accetta un iteratore .
- Quando si scrive un modello di funzione che dovrebbe funzionare con più di un tipo di contenitore.
- Esistono per creare uniformità tra tutti i contenitori e possibilità di utilizzare iteratori di tutti i contenitori e puntatori regolari in tutti gli algoritmi standard .
- Gli iteratori possono puntare a sequenze che non esistono tranne che come concetto. Ad esempio, è possibile creare una classe di iteratore che passi attraverso i numeri primi senza dover effettivamente creare un contenitore di numeri primi.
Tuttavia, se ignorando tipi di contenitori che non supportano l'accesso casuale (la lista, set, ecc), iteratori offrono ancora
- Pointer come la semantica (pensano di stringa :: iterator vs. char *).
- Concetto generalizzato utilizzabile oltre l'iterazione su elementi all'interno di un contenitore .
- In alcuni casi prestazioni migliori rispetto a quelle del membro del contenitore.
Sono d'accordo, e in particolare metterei l'accento su un vantaggio molto pratico: il ciclare attraverso gli elementi di un vettore usando gli iteratori è un errore sicuro per le situazioni off-by-one. Più semplicemente, usare gli iteratori per i vettori è in qualche modo indipendente dalla dimensione. –
Finché è necessario l'accesso sequenziale, hai ragione. In altri casi, non c'è uniformità. – xtofl
La modularità è la risposta. Immagina di avvolgere la tua logica in una chiamata di funzione (una buona pratica). In tal caso, facendolo ricevere l'iteratore lo renderà generico, in modo che possa operare su un array in stile C (puntatore), un vettore stl ++ o qualcosa che si comporta come un contenitore iteratore, come ad esempio un elenco collegato.
Questa domanda mi è stata posta recentemente riguardo alle prestazioni. Potresti dare un'occhiata alle risposte che ho ricevuto.
Controllare il seguente link: Iterators vs. indexes
La discussione è principalmente su performance, che si è rivelato essere dipendente dalla piattaforma, con lievi modifiche in ogni piattaforma.
Diresti quindi i vantaggi degli iteratori: il suo funzionamento a puntatore come i pochi metodi con cui viene fornito? – Babiker
Questo non è quello che sto dicendo, mi riferisco solo all'aspetto della performance. –
+1 Anche se la domanda riguardava i vantaggi con gli iteratori. Ma gli iteratori DO causano un sovraccarico. Ed è molto evidente. – ralphtheninja
Dico la sua portabilità attraverso i contenitori.
Se si scrive un codice utilizzando i vettori e si utilizza l'indice per eseguire l'iterazione, il codice non può essere modificato in altri contenitori in seguito.
typedef std::vector<int> myContainer; //only change here for std::list
for (myContainer::iterator iter = actualContainer.begin();
iter != actualContainer.end();
++iter)
{}
Nel codice precedente se si desidera passare dal vettore all'elenco, è molto semplice. Se tu avessi usato l'indice allora non sarà possibile.
In caso contrario, poiché il vettore utilizza iteratori di accesso casuale, dovrebbe essere lo stesso.(indice o iteratore qualsiasi cosa è ok)
- 1. Qual è la differenza tra "indice" e "indice elenco"
- 2. Qual è la differenza tra un indice tabella e un indice di visualizzazione?
- 3. Qual è la differenza tra un indice secondario e un indice invertito in Cassandra?
- 4. Qual è la differenza tra i metodi iteratore e vista?
- 5. Raccogliere elementi da un iteratore a un indice specifico
- 6. Qual è la differenza tra un controller e un servizio?
- 7. qual è la differenza tra UNICO INDICE e UNICO CHIAVE?
- 8. Qual è la differenza tra un vincolo univoco e un indice univoco
- 9. Qual è la differenza tra una sentinella e un iteratore finale?
- 10. Qual è la differenza tra un helper e un parziale?
- 11. In un database, qual è la differenza tra una chiave e un indice?
- 12. Qual è la differenza tra un Iterator Boost Single Pass e un Iterator Forward Traversal?
- 13. Qual è la differenza tra un algoritmo e un metodo
- 14. Qual è la differenza tra un pacchetto e un intento?
- 15. Qual è la differenza tra un "nonce" e un "GUID"?
- 16. Qual è la differenza tra un vettore e un vertice?
- 17. Qual è la differenza tra un nodo e un vertice?
- 18. Qual è la differenza tra un RoutedCommand e un RoutedUICommand?
- 19. Qual è la differenza tra un modello e un percorso?
- 20. Qual è la differenza tra un JavaBean e un POJO?
- 21. Qual è la differenza tra un array e un oggetto?
- 22. Qual è la differenza tra un dizionario e un array?
- 23. Qual è la differenza tra un tema e un modello?
- 24. Qual è la differenza tra un REPL e un interprete?
- 25. Qual è la differenza tra gli eventi Control.Enter e Control.GotFocus?
- 26. Qual è la differenza tra gli eventi "mouseup" e "clic"?
- 27. Qual è la differenza tra un indice e una chiave esterna?
- 28. Qual è la differenza tra un riferimento __weak e __block?
- 29. Qual è la differenza tra `##` e `hashCode`?
- 30. Qual è la differenza tra una chiusura e un modulo?
Differenziare tra l'accesso a "tutti gli elementi in ordine" (cioè l'iterazione) e l'accesso a "un elemento casuale" (cioè l'accesso). – xtofl