Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Iteratori u C++ - Zadatak

[es] :: C/C++ programiranje :: C/C++ za početnike :: Iteratori u C++ - Zadatak

[ Pregleda: 4328 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zlatko84
Zlatko Ivanovic
B&H

Član broj: 56218
Poruke: 45
*.teol.net.



Profil

icon Iteratori u C++ - Zadatak28.10.2009. u 13:56 - pre 175 meseci
Malo mi je nejasan pojam interatora u c++ pa bi molio za objasnjenja i neke jednostavne primjere ili jos bolje ako neko moze da rijesio ovaj zadatak pa da to bude kao primjer. Zadatak glasi ovako: Napisati klasu Linije, koja omogucava da prolazimo kroz string liniju po liniju. U tu svrhu, konstruktor kalse Linije treba da prima jedan argument tipa string. Klasa takodje treba da ima ugnjezdenu klasu interator, koja podrzava operatore inkrementiranja, dereferenciranja i poredjenja. Konačno, klasi Linije treba dodati metode begin() i end() sa uobičajnom semantikom.
Zlatko
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Iteratori u C++ - Zadatak28.10.2009. u 14:31 - pre 175 meseci
Pojam iteratora je uveden u C++ STL (Standard Template Library). Svaki kontejner (std::list, std::vector, std::map) u STL-u ima svoj iterator. Svi iteratori svih kontejnera se koriste na identičan način. To olakšava ovladavanje STL-om. Iteratori imaju ograničen skup aktivnosti koje s njima mogu da se rade. To sprečava programera da negde zabrlja. Najjednostavnija stvar je iteracija kroz ceo kontejner, i ovaj kod je istovetan, šta god da staviš umesto KONTEJNER:

Code:

void iteriraj(KONTEJNER& cinculatori)
{
  for (KONTEJNER::iterator it = cinculatori.begin(); it != cinculatori.end(); it++)
  {
    // Uradi nešto sa it*, recimo (it*).cinculiraj()
  }
}


Da bi ovo radilo ovaj KONTEJNER::iterator mora da može da dobije vrednost (operator = i kopi konstruktor), da se poredi sa drugim iteratorom (== i !=), da se inkrementira (it++ i ++it), i da se dereferencira (it*). To su sve operatori koje ti moraš da napišeš. Takođe, sama klasa KONTEJNER mora da ima dve funkcije, begin() koja vraća iterator na prvog člana, i end() koji vraća ono što je posle poslednjeg člana (tako da važi poslednji_član++ == end()). Ti (kreator klase KONTEJNER) sam odlučuješ šta je kod tebe prvo i poslednje, ali šta god da odlučiš ovaj primer gore mora da ima smisla kad se izvršava.

Ja nikad nisam pravio klasu koja mora da oponaša STL logiku, ali pretpostavljam da je suština funkcionalnosti u operatoru ++. Tu mora da postoji kod koji će promeniti vrednost iteratoru tako da dobiješ novi string kad se taj iterator dereferencira (sa *).

Ovde je olakšavajuća okolnost što ne mora da se implementira i operator --.
 
Odgovor na temu

zlatko84
Zlatko Ivanovic
B&H

Član broj: 56218
Poruke: 45
*.teol.net.



Profil

icon Re: Iteratori u C++ - Zadatak29.10.2009. u 08:17 - pre 175 meseci
Malo mi je sad jasnije ali ne bas kristalno kako bi ja volio da bude... Imas li neki primjer u kome se kreces po listi i radis nesto bilo sta sa svim djelovima i operatorima ukljucujuci i onaj begin() i end()...
Zlatko
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Iteratori u C++ - Zadatak29.10.2009. u 08:57 - pre 175 meseci
Izvinjavam se, samo sam preimenovao temu, ovo n mi para usi osima ko ja nisam pogresio i postoje interatori, onda vratite.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
93.87.4.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Iteratori u C++ - Zadatak29.10.2009. u 09:09 - pre 175 meseci
^
(OT)
Kako da ne, postoje i pnetlje ;)
 
Odgovor na temu

zlatko84
Zlatko Ivanovic
B&H

Član broj: 56218
Poruke: 45
*.teol.net.



Profil

icon Re: Iteratori u C++ - Zadatak29.10.2009. u 09:38 - pre 175 meseci
Ma ok je ja sam slucajno ubacio to n tako da nema problema i hvala...
Zlatko
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Iteratori u C++ - Zadatak29.10.2009. u 09:41 - pre 175 meseci
Citat:
zlatko84: Malo mi je sad jasnije ali ne bas kristalno kako bi ja volio da bude... Imas li neki primjer u kome se kreces po listi i radis nesto bilo sta sa svim djelovima i operatorima ukljucujuci i onaj begin() i end()...


Imaš na Guglu, traži "iterator begin end". Ima čak i na Vikipediji http://en.wikipedia.org/wiki/Iterator#C.2B.2B
 
Odgovor na temu

azolex
Necu da Kazem
ArcEmu? :p

Član broj: 240379
Poruke: 3
93.87.215.*



Profil

icon Re: Iteratori u C++ - Zadatak18.11.2009. u 21:17 - pre 174 meseci
Ovako, mozda moras da ukapiras Vectore, Mape i Setove prvo. Definisacemo vektor :
Code:

#include <vector>

std::Vector<int> NekiVektor; // std nije bas potreban

//Nakon toga u nekoj klasi "NekaKlasa" cemo napraviti funkcije za manipulciju vektora, takodje deklarisacemo taj vektor unutar clase:
Public Class NekaKlasa 
{
NekiVektor mNekiVektor; // oznacili smo ga

public void DodajElement( int pElement )  
{
      mNekiVektor.push_back( pElement ); // dodaj mo ga, mozemo dodati i provere dali je element vec unutra
};     

public bool ImaLiElementaElement( int pElement ) // proverimo dali ima element, ovde cu objasniti iterator
{
       for (vector<int>::iterator it = mNekiVektor.begin(); it != mNekiVektor.end(); it++)
      {
              if ( (it*) == pElement )
                      return true;
      }
      return false;
};
// u prethodnom codu:
// Dodao sam element x tipa integer, nakon toga zelim da ga selektujem, pregledavam svaki element vektora mNekiVektor dok nenadjem element koji je jednak trazenoj vrednost
// Unutar te funkcije svaki element je van vektora oznacen kao "Iterator" tipa int
};


Nadam se da ti je ovo pomoglo, ja sam los objasnjavac :)
 
Odgovor na temu

azolex
Necu da Kazem
ArcEmu? :p

Član broj: 240379
Poruke: 3
93.87.215.*



Profil

icon Re: Iteratori u C++ - Zadatak18.11.2009. u 21:21 - pre 174 meseci
A da, nisam rekao .begin() i .end() je funkcija koja prolazi kroz ceo vektor(u ovom slucaju) odnosno neki "skup" posto za razliku od skupova svaki member nema dodeljenu brojcanu poziciju primer mArray[1] vektori se "storuju" odnosno redjaju po drugacijem redu odnosno vektorskom( mape i setovi takodje drugacije ) tako da .begin() i .end() samo jednostavno pretrazuju vektor.

EDIT1: A da nisam dodao odabrani iterator koji je deklarovan kao odredjeni tip primer int se ponasa kao obican "pointer" tako da sve sto mozes sa normalno odredjenim "pointerom" mozes i sa njim.

Koristim engleske izraze posto prvi put na srpskom pricam nesto vezano za programiranje :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Iteratori u C++ - Zadatak

[ Pregleda: 4328 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.