Vector a erase – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vector a erase – C / C++ – Fórum – Programujte.comVector a erase – C / C++ – Fórum – Programujte.com

 

yaqwsx+9
Posthunter
18. 3. 2008   #1
-
0
-

Mám tento kód:

	std::vector<objekt>::iterator beg = kos.begin();

//kos je vector
while (beg != kos.end())
{
if(beg->ear() == true)//Jestliže má být prvek smazán, nechť je....
{
kos.erase(beg);
}
else beg++;

}


Nevím, kde mám chybu, ale když se má smazat nějáký prvek, tak to smaže ho + ostatní, co jsou za ním...

Nahlásit jako SPAM
IP: 85.160.97.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
yaqwsx+9
Posthunter
18. 3. 2008   #2
-
0
-

TAk jsem zkusil ještě remove_if, avšak se stejným výsledkem...

Nahlásit jako SPAM
IP: 85.160.97.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
sn3d0
Věrný člen
19. 3. 2008   #3
-
0
-

A ako si skusal remove_if?? Skus sem hodit kod ale myslim ze idioma erase-remove by nemala robit halusky:



kos.erase( remove_if(kos.begin(), kos.end(), predikat) );

Nahlásit jako SPAM
IP: 213.151.208.–
shutdown -h now
yaqwsx+9
Posthunter
19. 3. 2008   #4
-
0
-

Muj kod vypada nasledovne:



bool pred(objekt& c)
{
return c.ear();
}
kos.erase(remove_if(kos.begin(), kos.end(), pred));

Nahlásit jako SPAM
IP: 217.112.166.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Jura_0
Stálý člen
19. 3. 2008   #5
-
0
-

Zdravím,

chválím nápad, nicméně, takhle to nefunguje;) . Predicate je funkční objekt, tzn. třída, která má přetížený operator(). Kromě toho remove_if očekává unarní funkční objekt (má pouze jeden argument).



struct condition: public std::unary_function<objekt, bool>
{
bool operator() (const objekt& obj) const
{ return obj.ear;
}
}

Nahlásit jako SPAM
IP: 85.207.192.–
yaqwsx+9
Posthunter
19. 3. 2008   #6
-
0
-

To Jura_ : Díky, i když pokud si dobře pamatuji tak v mistrovství se píše, že predikát může být buď funkční objekt, nebo f-ce s návratovou hodnotou typu bool a jedním argumentem....

Nahlásit jako SPAM
IP: 85.160.97.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Huge0
Návštěvník
21. 3. 2008   #7
-
0
-

Vrátím se k tvému původnímu kódu a řeknu ti, že když vymažeš prvek pod iterátorem, tak se iterátor zneplatní a pak děj se vůle boží.
Tedy, co musíš udělat je, uložit si po smazání prvku do iterátoru prvek, jež se nachází za smazaným, tím se problémům vyhneš.
A další prvek je navrácen funkcí erase, takže kód má vypadat takto:

kos = kos.erase(beg);


Kdyby to nefungovalo, tak si stěžuj, netestoval jsem to, ale je to triviálnost a fachat by to mělo.

Nahlásit jako SPAM
IP: 88.102.203.–
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, 107 hostů

Podobná vlákna

Vector — založil Peter D.

Vector vo vector — založil Juraj

2D vector — založil Huge

Vector v STL — založil yaqwsx

Moderátoři diskuze

 

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