Iteratory :-((((

js
Site Admin
Příspěvky: 144
Registrován: 22. 9. 2004 06:06
Typ studia: Fyzika Ph.D.
Bydliště: Praha

Iteratory :-((((

Příspěvek od js »

Predstavte si, ze mate

Kód: Vybrat vše

template <typename T> class TItem
{
public:
	T TValue;
	bool TIsValid;
	TItem()	{ TValue = T(); TIsValid = false; }
	TItem(const T& h) { TValue = h; TIsValid = true; }
};
a taky

Kód: Vybrat vše

template <typename T> class ArrayList
{
private:
	vector<TItem<T> > p;
        ....
public:
        ....
        Class Iterator;
        Iterator Begin();
        Iterator End();
        ....
        Class ReverseIterator;
        ReverseIterator RBegin();
        ReverseIterator REnd();
};
Ve vectoru p muzou byt jak TItem s TIsValid=true, tak s TIsValid=false
Jak byste proboha na tuhle sablonu udelali iteratory, ktery prochazej p a vracej jenom iteratory na prvky, ktery maji TIsValid=true?
Ja se o to snazim uz dva dny, ale Iterator mi iteruje jenom od 1. platneho prvku do (n-1). platneho, tj. nezobrazi to n-ty, pro zmenu ReverseIterator mi itruje pres cely interval prvku, ale kdyz chci nechat iterovat jenom pres platne, tak to hodi par krajnich hodnot spravne, pak nekolik nul a pak posledni spravne :( Uz vazne nevim, co delam blbe :((( Heeeeeeelp :oops:
JS
js
Site Admin
Příspěvky: 144
Registrován: 22. 9. 2004 06:06
Typ studia: Fyzika Ph.D.
Bydliště: Praha

Příspěvek od js »

:?: :?: :?: :?: :?: :?: :?: :?: :?:
JS
gASK
Admin(ka) level I
Příspěvky: 635
Registrován: 9. 6. 2005 12:33
Typ studia: Informatika Mgr.
Bydliště: Konečně Vinohrady:)
Kontaktovat uživatele:

Příspěvek od gASK »

Nějak jsem z tvého textu nepochopil, co vlatně chceš.

Myslíš iterator, kterej po zavolání begin hodí první prvek s TIsValid == true a po zavolání ++ další atd. až po end?

Možná by pomohl obáhlejší kód. Postni sem víc, můžeš-li. Znáš to, někde tam je jedno blbý mínus, který ty nevidíš, ale první člověk co ti koukne přes rameno na něj ukáže :twisted:
gASK
Admin(ka) level I
Příspěvky: 635
Registrován: 9. 6. 2005 12:33
Typ studia: Informatika Mgr.
Bydliště: Konečně Vinohrady:)
Kontaktovat uživatele:

Příspěvek od gASK »

Ok, k tomu kódu jsem se ještě nedostal, vrhnu se na to v noci.

Ale mám pár nápadů.

Tak za prvé, ten vector je povinnej nebo můžeš použít libovolnou strukturu? Protože by se to dle mého názoru poněkud snadněji implementovalo s multimapem, kde klíčem by byla boolová hodnota určující validitu - usnadnilo by se tím vyhledávání validních prvků.

Pokud je, pak mne napadla sice naivní implementace s lineární složitostí, ale zato bude (téměř) jistě fungovat. A sice pro Begin() si vzít Begin() z toho vectoru p, kouknout je-li validní. Není-li, skočit dál (++) atd. dokud nenajdu validní prvek nebo nedojdu na konec vectoru p. Analogicky (ale pozpátku) pro End(). Ten posun pak udělat podobně - tzn skáču dopředu ve vectoru p dokud nenajdu další validní prvek. Pro usnadnění a urychlení si případně můžu ten validní Begin a End držet v nějakejch proměnejch, páč se tak často nemění.

Ovšem má-li ta implementace být do určité složitosti či aspoň nějak "pěkná", je výše uvedený algortimus zbytečný.

Ještě jsem měl jednu myšlenku. Ale nějak mi vypadla. No nic :wink:
js
Site Admin
Příspěvky: 144
Registrován: 22. 9. 2004 06:06
Typ studia: Fyzika Ph.D.
Bydliště: Praha

Příspěvek od js »

gASK píše:Tak za prvé, ten vector je povinnej nebo můžeš použít libovolnou strukturu? Protože by se to dle mého názoru poněkud snadněji implementovalo s multimapem, kde klíčem by byla boolová hodnota určující validitu - usnadnilo by se tím vyhledávání validních prvků.
vector povinnej neni, muzu pouzit cokoli.
JS
Odpovědět

Zpět na „2005“