panda84
30-11-2009, 15:51
Ciao a tutti!
Per motivi vari (vecchio sistema operativo embebbed che gira dentro un vecchio e malfunzionante simulatore ARM di cui non posso fare a meno) sto reimplementando una piccola parte della classe vector in modo da poter utilizzare codice di terze parti che usa la succitata classe senza doverne modificare tutto il codice.
Sono riuscito a implementare tutti i metodi di base che mi servono dalla classe vector e sembra funzionare tutto senza problemi. Ora ho un ultimo scoglio da superare; ho letto qui:
http://www.cplusplus.com/reference/std/iterator/
che il puntatore è una forma di iteratore. Per semplicità, visto che non sono pratico di iteratori, ho utilizzato temporaneamente dei puntatori. Ad esempio invece di definire:
iterator begin ();
come nelle STL:
http://www.cplusplus.com/reference/stl/vector/begin/
ho utilizzato:
T* begin();
Ora però, mentre con l'implementazione STL di vector i cicli si fanno così:
for (vector<int>::iterator it = myobject.begin(); it != myobject.end(); it++)
io devo farli così.
for (int* it = myobject.begin(); it != myobject.end(); it++)
Cosa devo cambiare nella mia implementazione per usare la sintassi originale? Ovvero, non capisco cosa devo fare "internamente" alla mia versione di vector per ottenere "esternamente" la sintassi:
vector<int>::iterator
Anche in questo esempio:
http://www.cplusplus.com/reference/std/iterator/iterator/
ottengono:
myiterator it=beginning
Scusate, ma credo di avere ancora qualche difficoltà con le classi template...
Grazie a chiunque proverà ad aiutarmi! :)
Diego
P.S.: Se volete vedere la mia "barbara" implementazione di vector posso metterla su pastebin senza problema.
Per motivi vari (vecchio sistema operativo embebbed che gira dentro un vecchio e malfunzionante simulatore ARM di cui non posso fare a meno) sto reimplementando una piccola parte della classe vector in modo da poter utilizzare codice di terze parti che usa la succitata classe senza doverne modificare tutto il codice.
Sono riuscito a implementare tutti i metodi di base che mi servono dalla classe vector e sembra funzionare tutto senza problemi. Ora ho un ultimo scoglio da superare; ho letto qui:
http://www.cplusplus.com/reference/std/iterator/
che il puntatore è una forma di iteratore. Per semplicità, visto che non sono pratico di iteratori, ho utilizzato temporaneamente dei puntatori. Ad esempio invece di definire:
iterator begin ();
come nelle STL:
http://www.cplusplus.com/reference/stl/vector/begin/
ho utilizzato:
T* begin();
Ora però, mentre con l'implementazione STL di vector i cicli si fanno così:
for (vector<int>::iterator it = myobject.begin(); it != myobject.end(); it++)
io devo farli così.
for (int* it = myobject.begin(); it != myobject.end(); it++)
Cosa devo cambiare nella mia implementazione per usare la sintassi originale? Ovvero, non capisco cosa devo fare "internamente" alla mia versione di vector per ottenere "esternamente" la sintassi:
vector<int>::iterator
Anche in questo esempio:
http://www.cplusplus.com/reference/std/iterator/iterator/
ottengono:
myiterator it=beginning
Scusate, ma credo di avere ancora qualche difficoltà con le classi template...
Grazie a chiunque proverà ad aiutarmi! :)
Diego
P.S.: Se volete vedere la mia "barbara" implementazione di vector posso metterla su pastebin senza problema.