Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 5.660 pregleda

Najnovija ↓

Iteratori u C++ - Zadatak 28.10.2009. u 14:56 · pre 207 meseci #1
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.
Potpis
Zlatko
Re: Iteratori u C++ - Zadatak 28.10.2009. u 15:31 · pre 207 meseci #2
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 --.
Re: Iteratori u C++ - Zadatak 29.10.2009. u 09:17 · pre 207 meseci #3
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()...
Potpis
Zlatko
Re: Iteratori u C++ - Zadatak 29.10.2009. u 09:57 · pre 207 meseci #4
Izvinjavam se, samo sam preimenovao temu, ovo n mi para usi :) osima ko ja nisam pogresio i postoje interatori, onda vratite.
Potpis
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ć
Re: Iteratori u C++ - Zadatak 29.10.2009. u 10:09 · pre 207 meseci #5
^
(OT)
Kako da ne, postoje i pnetlje ;)
Re: Iteratori u C++ - Zadatak 29.10.2009. u 10:38 · pre 207 meseci #6
Ma ok je ja sam slucajno ubacio to n tako da nema problema i hvala...
Potpis
Zlatko
Re: Iteratori u C++ - Zadatak 29.10.2009. u 10:41 · pre 207 meseci #7
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
Re: Iteratori u C++ - Zadatak 18.11.2009. u 22:17 · pre 206 meseci #8
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 :)
Re: Iteratori u C++ - Zadatak 18.11.2009. u 22:21 · pre 206 meseci #9
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 :)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme