Konverze iteratoru na pointer – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Konverze iteratoru na pointer – C / C++ – Fórum – Programujte.comKonverze iteratoru na pointer – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Martin
~ Anonymní uživatel
1377 příspěvků
15. 12. 2011   #1
-
0
-

Ahoj, 

   mám list pointerů. Rád bych jej prošel a vrátil pointer na hledaný objekt (Person). Je možné převést iterator na pointer? Díky

   Stačilo by mi získat pointer na první prvek listu, pak by to snad šlo si vypomoct funkcí distance(). Díky, Martin.

list<Person*> persons;

Person *p  = &this->persons.begin().; // nefunkcni
	for (list<Person*>::const_iterator it = this->persons.begin(); it != this->persons.end(); ++it) {

}
Nahlásit jako SPAM
IP: 193.48.172.–
Reklama
Reklama
H4wk.cz0
Newbie
15. 12. 2011   #2
-
0
-

Iterátor se chová jako pointer, můžeš s ním dělat vše to co s pointrem. Pokud chceš opravdový pointer, tak bude fungovat třeba &(*it)

Nahlásit jako SPAM
IP: 83.208.107.–
http://ksp.mff.cuni.cz - Nauč se opravdu programovat
vitamin+8
Grafoman
15. 12. 2011   #3
-
0
-

pouzi iterator::operator*()

list<Person*> persons;

Person *p;

p  = *persons.begin();

//alebo:

p = persons.front()
Nahlásit jako SPAM
IP: 178.143.60.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Martin
~ Anonymní uživatel
1377 příspěvků
15. 12. 2011   #4
-
0
-

Ahoj, diky moc.

list<Person*> persons;

Person *p;

p = persons.front()

uvedené řešení funguje dobře. Teď když mám pointer na první prvek, je možné se posunout na i-ty prvek?

Mylně jsem se domníval, že by mohlo fungovat něco takového:

list<Person*>::const_iterator it; // meni se v cykluPerson *p;
p = persons.front();
list<Person*>::const_iterator first = this->persons.begin();
int dis = distance(first, it);
p = p + dis*sizeof(Person*);
Nahlásit jako SPAM
IP: 193.48.172.–
zlz
~ Anonymní uživatel
634 příspěvků
15. 12. 2011   #5
-
0
-

Co to zkoušíš? Použij přímo ten 'it' !

Nahlásit jako SPAM
IP: 213.211.51.–
KIIV+42
God of flame
15. 12. 2011   #6
-
0
-

od doby co tam ukladas pointery na prvky (ktere musis nekde alokovat), je nepravdepodobne ze budou taky za sebou v pameti... (ne nemozne ale nepravdepodobne) tim padem ukazatelova aritmetika nemuze fungovat poradne.

Tj. iterator se aspon tvari jako ze to je po sobe

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
15. 12. 2011   #7
-
0
-

#4 Martin
Skus si implementovat vlastny zretazeny zoznam. Mam taky dojem ze nevies ako funguje a tym padom ani nevies pouzivat list.

Nahlásit jako SPAM
IP: 178.143.60.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Martin
~ Anonymní uživatel
1377 příspěvků
15. 12. 2011   #8
-
0
-

I když tomu tak nevypadá, vlasnít list jsme implementovali nedávno. Z nejakeho duvodu jsem se domnival, ze vsechny pointery budou nutne za sebou. Díky za všechny odpovědi. 

Zkoušel jsem tento kód a když nefungoval, tak jsem hledal jiné řešení.

Person *p;
p = &(*it); // chyba kompilace, cannot convert ‘Person* const*’ to ‘Person*’

Pomohlo

Person *p;
p = &**it;
Nahlásit jako SPAM
IP: 193.48.172.–
zlz
~ Anonymní uživatel
634 příspěvků
15. 12. 2011   #9
-
0
-

   

p = *it;
Nahlásit jako SPAM
IP: 213.211.51.–
Martin
~ Anonymní uživatel
1377 příspěvků
15. 12. 2011   #10
-
0
-

Díky,  funguje také.

Nahlásit jako SPAM
IP: 193.48.172.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 140 hostů

Podobná vlákna

Efektivita iterátorů — založil vdolek

Konverze datových typů — založil bernie

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý