Devo eseguire il cout e restituire l'indice di un elemento deque a cui punta un iteratore. Come ottengo un int di un iteratore?In C++, come ottengo un indice int di un iteratore?
risposta
std::ptrdiff_t index = std::distance(myDeque.begin(), curIterator);
È possibile utilizzare:
std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));
essere consapevoli dei costi di esecuzione di tale procedura, tuttavia- dipende dalla struttura dei dati che si usa.
O piuttosto dipende dalla classe di iteratore (casuale, avanti, ecc.) –
Sto assumendo passi di distanza attraverso ogni elemento del contenitore per trovare il numero, quindi per un deque grande il costo di runtime sarebbe grande. Tuttavia, il mio deque non dovrebbe essere più grande di 10 elementi. E la distanza restituisce un int? Che cosa fa la chiamata a index()? – user83
Se la tua deque non dovesse contenere più di 10 elementi, ti suggerirei di utilizzare invece 'vector', o almeno di avere una buona motivazione per attaccare con deque. La "chiamata" index() è solo una variabile chiamata 'index' costruita con il valore restituito da' std :: distance'. – fbrereto
Per iteratori ad accesso casuale si può semplicemente utilizzare la sottrazione:
size_t index = some_iterator - some_deque.begin()
Ovviamente questo non funziona per tutti gli iteratori ma mi piacerebbe sostengono che c'è una certa eleganza in (ad esempio per std::list
o qualsiasi altra cosa.) che puoi usare questa tecnica solo quando ci vorrà del tempo costante. Se il tuo contenitore non ha iteratori ad accesso casuale, probabilmente non è sensato cercare di trovare comunque l'indice.
Penso che voterò questa la migliore risposta per la sua semplicità ed eleganza. Potrei assegnare il risultato a un int per farlo trasmettere ad un int? – user83
È possibile assegnarlo a un int, ma probabilmente riceverai un avviso del compilatore a livelli di avviso più elevati (conversione non firmata - firmata o abbreviazione effettiva del tipo, a seconda del compilatore, ecc.).È un po 'fastidioso dover eseguire il cast esplicito su int, ma questo non nasconderà un problema a meno che tu non abbia più di 2 miliardi di elementi nella tua creatività, il che credo che sarai abbastanza sicuro che non lo farai :) – Peter
Dei due metodi presentati:
std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));
e
std::ptrdiff_t index = some_iterator - some_deque.begin()
... il secondo ha la superiorità di essere applicabile solo alle iteratori ad accesso casuale - quindi quando sostituendo un altro contenitore , non accidentalmente ottenere un'operazione costosa (O (n) per gli elenchi, ad esempio).
- 1. Raccogliere elementi da un iteratore a un indice specifico
- 2. Come utilizzare un iteratore?
- 3. dereferencing rendimenti stringa iteratore int
- 4. Ottieni indice dell'oggetto iteratore python
- 5. Trova l'indirizzo di un indice in un array in C
- 6. Casuale "int non è un indice" comportamento
- 7. ottenendo "indice" dell'elemento set tramite iteratore
- 8. Come decomprimere un iteratore?
- 9. std :: deque: come si ottiene un iteratore che punta all'elemento in un indice specificato?
- 10. Come hash un int [] in C#
- 11. C++ iteratore e invertire iteratore
- 12. Come ottengo un gradiente di colore arcobaleno in C#?
- 13. iteratore "generico" in C++
- 14. Perché ottengo l'output spazzatura quando si stampa un [] int?
- 15. Iteratore personalizzato in C++
- 16. Esiste un iteratore scrivibile in Java?
- 17. Esiste un iteratore ciclico standard C++
- 18. ricorsione in C# iteratore
- 19. C++ invalidazione iteratore multimap
- 20. Objective-C, come posso convertire un double in un int?
- 21. Come ottengo una voce di elenco per indice in elm?
- 22. Utilizzando un enum come indice array in C#
- 23. Perché ottengo un int quando indicizzo i byte?
- 24. Provare a convertire un int [] in int [,] utilizzando C#
- 25. Come ottengo gli 8 bit inferiori di int?
- 26. C++ problemi iteratore
- 27. Convertire un indice di array 2D in un indice 1D
- 28. Come ottengo% LocalAppData% in C#?
- 29. Come definire un tipo di interfaccia iteratore?
- 30. Come incrementare un iteratore di 2?
Perché hai bisogno dell'indice? Non puoi semplicemente dereferenziare l'oggetto e fare iterator aritmetico su di esso? –
Come mai? Non direzionare l'iteratore equivale a dereferenziare un puntatore e darmi l'indirizzo di memoria, non la posizione nella deque? – user83